{"maintainers":[{"name":"bripkens","email":"bripkens.dev@gmail.com"}],"dist-tags":{"latest":"1.3.0"},"author":{"name":"Ben Ripkens","email":"bripkens.dev@gmail.com","url":"http://bripkens.de"},"description":"Provides a fallback for non-existing directories so that the HTML 5 history API can be used.","readme":"<h1 align=\"center\">connect-history-api-fallback</h1>\n<p align=\"center\">Middleware to proxy requests through a specified index page, useful for Single Page Applications that utilise the HTML5 History API.</p>\n\n[![Build Status](https://travis-ci.org/bripkens/connect-history-api-fallback.svg?branch=master)](https://travis-ci.org/bripkens/connect-history-api-fallback)\n[![Dependency Status](https://david-dm.org/bripkens/connect-history-api-fallback/master.svg)](https://david-dm.org/bripkens/connect-history-api-fallback/master)\n\n[![NPM](https://nodei.co/npm/connect-history-api-fallback.png?downloads=true&downloadRank=true)](https://nodei.co/npm/connect-history-api-fallback/)\n\n## Introduction\n\nSingle Page Applications (SPA) typically only utilise one index file that is\naccessible by web browsers: usually `index.html`. Navigation in the application\nis then commonly handled using JavaScript with the help of the\n[HTML5 History API](http://www.w3.org/html/wg/drafts/html/master/single-page.html#the-history-interface).\nThis results in issues when the user hits the refresh button or is directly\naccessing a page other than the landing page, e.g. `/help` or `/help/online`\nas the web server bypasses the index file to locate the file at this location.\nAs your application is a SPA, the web server will fail trying to retrieve the file and return a *404 - Not Found*\nmessage to the user.\n\nThis tiny middleware addresses some of the issues. Specifically, it will change\nthe requested location to the index you specify (default being `/index.html`)\nwhenever there is a request which fulfills the following criteria:\n\n 1. The request is a GET request\n 2. which accepts `text/html`,\n 3. is not a direct file request, i.e. the requested path does not contain a\n    `.` (DOT) character and\n 4. does not match a pattern provided in options.rewrites (see options below)\n\n## Usage\n\nThe middleware is available through NPM and can easily be added.\n\n```\nnpm install --save connect-history-api-fallback\n```\n\nImport the library\n\n```javascript\nvar history = require('connect-history-api-fallback');\n```\n\nNow you only need to add the middleware to your application like so\n\n```javascript\nvar connect = require('connect');\n\nvar app = connect()\n  .use(history())\n  .listen(3000);\n```\n\nOf course you can also use this piece of middleware with express:\n\n```javascript\nvar express = require('express');\n\nvar app = express();\napp.use(history());\n```\n\n## Options\nYou can optionally pass options to the library when obtaining the middleware\n\n```javascript\nvar middleware = history({});\n```\n\n### index\nOverride the index (default `/index.html`)\n\n```javascript\nhistory({\n  index: '/default.html'\n});\n```\n\n### rewrites\nOverride the index when the request url matches a regex pattern. You can either rewrite to a static string or use a function to transform the incoming request.\n\nThe following will rewrite a request that matches the `/\\/soccer/` pattern to `/soccer.html`.\n```javascript\nhistory({\n  rewrites: [\n    { from: /\\/soccer/, to: '/soccer.html'}\n  ]\n});\n```\n\nAlternatively functions can be used to have more control over the rewrite process. For instance, the following listing shows how requests to `/libs/jquery/jquery.1.12.0.min.js` and the like can be routed to `./bower_components/libs/jquery/jquery.1.12.0.min.js`. You can also make use of this if you have an API version in the URL path.\n```javascript\nhistory({\n  rewrites: [\n    {\n      from: /^\\/libs\\/.*$/,\n      to: function(context) {\n        return '/bower_components' + context.parsedUrl.pathname;\n      }\n    }\n  ]\n});\n```\n\nThe function will always be called with a context object that has the following properties:\n\n - **parsedUrl**: Information about the URL as provided by the [URL module's](https://nodejs.org/api/url.html#url_url_parse_urlstr_parsequerystring_slashesdenotehost) `url.parse`.\n - **match**: An Array of matched results as provided by `String.match(...)`.\n\n\n### verbose\nThis middleware does not log any information by default. If you wish to activate logging, then you can do so via the `verbose` option or by specifying a logger function.\n\n```javascript\nhistory({\n  verbose: true\n});\n```\n\nAlternatively use your own logger\n\n```javascript\nhistory({\n  logger: console.log.bind(console)\n});\n```\n\n### htmlAcceptHeaders\nOverride the default `Accepts:` headers that are queried when matching HTML content requests (Default: `['text/html', '*/*']`).\n\n```javascript\nhistory({\n  htmlAcceptHeaders: ['text/html', 'application/xhtml+xml']\n})\n```\n\n### disableDotRule\nDisables the dot rule mentioned above:\n\n> […] is not a direct file request, i.e. the requested path does not contain a `.` (DOT) character […]\n\n```javascript\nhistory({\n  disableDotRule: true\n})\n```\n","repository":{"type":"git","url":"git+ssh://git@github.com/bripkens/connect-history-api-fallback.git"},"users":{"jabbrwcky":true,"sabrina.luo":true,"travm":true,"staydan":true,"panlw":true,"lore-w":true},"bugs":{"url":"https://github.com/bripkens/connect-history-api-fallback/issues"},"license":"MIT","versions":{"0.0.1":{"name":"connect-history-api-fallback","version":"0.0.1","description":"Provides a fallback for non-existing directories so that the HTML 5 history API can be used.","keyswords":["connect","html5","history api","fallback","spa"],"engines":{"node":">=0.8"},"main":"lib/index.js","scripts":{"test":"grunt"},"repository":{"type":"git","url":"http://github.com/bripkens/connect-history-api-fallback.git"},"author":{"name":"Ben Ripkens","email":"bripkens.dev@gmail.com","url":"http://bripkens.de"},"license":"MIT","devDependencies":{"grunt":"~0.4.1","grunt-contrib-nodeunit":"~0.1.2"},"_id":"connect-history-api-fallback@0.0.1","dist":{"shasum":"deb051601f0ebd13727c76b165d73fef52f65975","tarball":"http://nexus.dui88.com:8081/nexus/content/groups/npm-all/connect-history-api-fallback/-/connect-history-api-fallback-0.0.1.tgz"},"_from":".","_npmVersion":"1.2.15","_npmUser":{"name":"bripkens","email":"bripkens.dev@gmail.com"},"maintainers":[{"name":"bripkens","email":"bripkens.dev@gmail.com"}],"directories":{}},"0.0.2":{"name":"connect-history-api-fallback","version":"0.0.2","description":"Provides a fallback for non-existing directories so that the HTML 5 history API can be used.","keyswords":["connect","html5","history api","fallback","spa"],"engines":{"node":">=0.8"},"main":"lib/index.js","scripts":{"test":"grunt"},"repository":{"type":"git","url":"http://github.com/bripkens/connect-history-api-fallback.git"},"author":{"name":"Ben Ripkens","email":"bripkens.dev@gmail.com","url":"http://bripkens.de"},"license":"MIT","devDependencies":{"grunt":"~0.4.1","grunt-contrib-nodeunit":"~0.1.2"},"_id":"connect-history-api-fallback@0.0.2","dist":{"shasum":"674832149d54813039ed57919ebd89337ebedb9c","tarball":"http://nexus.dui88.com:8081/nexus/content/groups/npm-all/connect-history-api-fallback/-/connect-history-api-fallback-0.0.2.tgz"},"_from":".","_npmVersion":"1.2.15","_npmUser":{"name":"bripkens","email":"bripkens.dev@gmail.com"},"maintainers":[{"name":"bripkens","email":"bripkens.dev@gmail.com"}],"directories":{}},"0.0.3":{"name":"connect-history-api-fallback","version":"0.0.3","description":"Provides a fallback for non-existing directories so that the HTML 5 history API can be used.","keyswords":["connect","html5","history api","fallback","spa"],"engines":{"node":">=0.8"},"main":"lib/index.js","scripts":{"test":"grunt"},"repository":{"type":"git","url":"http://github.com/bripkens/connect-history-api-fallback.git"},"author":{"name":"Ben Ripkens","email":"bripkens.dev@gmail.com","url":"http://bripkens.de"},"license":"MIT","devDependencies":{"grunt":"~0.4.1","grunt-contrib-nodeunit":"~0.1.2"},"_id":"connect-history-api-fallback@0.0.3","dist":{"shasum":"946b96eb735defe203c20dfe37c28874ea758a91","tarball":"http://nexus.dui88.com:8081/nexus/content/groups/npm-all/connect-history-api-fallback/-/connect-history-api-fallback-0.0.3.tgz"},"_from":".","_npmVersion":"1.2.15","_npmUser":{"name":"bripkens","email":"bripkens.dev@gmail.com"},"maintainers":[{"name":"bripkens","email":"bripkens.dev@gmail.com"}],"directories":{}},"0.0.4":{"name":"connect-history-api-fallback","version":"0.0.4","description":"Provides a fallback for non-existing directories so that the HTML 5 history API can be used.","keyswords":["connect","html5","history api","fallback","spa"],"engines":{"node":">=0.8"},"main":"lib/index.js","scripts":{"test":"grunt"},"repository":{"type":"git","url":"http://github.com/bripkens/connect-history-api-fallback.git"},"author":{"name":"Ben Ripkens","email":"bripkens.dev@gmail.com","url":"http://bripkens.de"},"license":"MIT","devDependencies":{"grunt":"~0.4.1","grunt-contrib-nodeunit":"~0.1.2"},"_id":"connect-history-api-fallback@0.0.4","dist":{"shasum":"b430713e14b52df4a97de72bd17d38cbddbe14d3","tarball":"http://nexus.dui88.com:8081/nexus/content/groups/npm-all/connect-history-api-fallback/-/connect-history-api-fallback-0.0.4.tgz"},"_from":".","_npmVersion":"1.2.15","_npmUser":{"name":"bripkens","email":"bripkens.dev@gmail.com"},"maintainers":[{"name":"bripkens","email":"bripkens.dev@gmail.com"}],"directories":{}},"0.0.5":{"name":"connect-history-api-fallback","version":"0.0.5","description":"Provides a fallback for non-existing directories so that the HTML 5 history API can be used.","keyswords":["connect","html5","history api","fallback","spa"],"engines":{"node":">=0.8"},"main":"lib/index.js","scripts":{"test":"grunt"},"repository":{"type":"git","url":"http://github.com/bripkens/connect-history-api-fallback.git"},"author":{"name":"Ben Ripkens","email":"bripkens.dev@gmail.com","url":"http://bripkens.de"},"license":"MIT","devDependencies":{"grunt":"~0.4.1","grunt-contrib-nodeunit":"~0.1.2"},"bugs":{"url":"https://github.com/bripkens/connect-history-api-fallback/issues"},"homepage":"https://github.com/bripkens/connect-history-api-fallback","_id":"connect-history-api-fallback@0.0.5","dist":{"shasum":"ef0509d0040bfbc486eab5f7f500bb1769cf354a","tarball":"http://nexus.dui88.com:8081/nexus/content/groups/npm-all/connect-history-api-fallback/-/connect-history-api-fallback-0.0.5.tgz"},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"bripkens","email":"bripkens.dev@gmail.com"},"maintainers":[{"name":"bripkens","email":"bripkens.dev@gmail.com"}],"directories":{}},"1.0.0":{"name":"connect-history-api-fallback","version":"1.0.0","description":"Provides a fallback for non-existing directories so that the HTML 5 history API can be used.","keyswords":["connect","html5","history api","fallback","spa"],"engines":{"node":">=0.8"},"main":"lib/index.js","scripts":{"test":"eslint lib/index.js test/index_test.js && nodeunit test/index_test.js"},"repository":{"type":"git","url":"http://github.com/bripkens/connect-history-api-fallback.git"},"author":{"name":"Ben Ripkens","email":"bripkens.dev@gmail.com","url":"http://bripkens.de"},"contributors":[{"name":"Craig Myles","email":"cr@igmyles.com","url":"http://www.craigmyles.com"}],"license":"MIT","devDependencies":{"eslint":"^0.18.0","nodeunit":"^0.9.1","sinon":"^1.14.1"},"gitHead":"7c4738211539505d1e8c2da9a3abbf03feaacc73","bugs":{"url":"https://github.com/bripkens/connect-history-api-fallback/issues"},"homepage":"https://github.com/bripkens/connect-history-api-fallback","_id":"connect-history-api-fallback@1.0.0","_shasum":"a3bdae0c97a0f15b861674725ef4cca6b084d8f6","_from":".","_npmVersion":"2.7.5","_nodeVersion":"0.10.37","_npmUser":{"name":"bripkens","email":"bripkens.dev@gmail.com"},"maintainers":[{"name":"bripkens","email":"bripkens.dev@gmail.com"}],"dist":{"shasum":"a3bdae0c97a0f15b861674725ef4cca6b084d8f6","tarball":"http://nexus.dui88.com:8081/nexus/content/groups/npm-all/connect-history-api-fallback/-/connect-history-api-fallback-1.0.0.tgz"},"directories":{}},"1.1.0":{"name":"connect-history-api-fallback","version":"1.1.0","description":"Provides a fallback for non-existing directories so that the HTML 5 history API can be used.","keyswords":["connect","html5","history api","fallback","spa"],"engines":{"node":">=0.8"},"main":"lib/index.js","scripts":{"test":"eslint lib/index.js test/index_test.js && nodeunit test/index_test.js"},"repository":{"type":"git","url":"http://github.com/bripkens/connect-history-api-fallback.git"},"author":{"name":"Ben Ripkens","email":"bripkens.dev@gmail.com","url":"http://bripkens.de"},"contributors":[{"name":"Craig Myles","email":"cr@igmyles.com","url":"http://www.craigmyles.com"}],"license":"MIT","devDependencies":{"eslint":"^0.18.0","nodeunit":"^0.9.1","sinon":"^1.14.1"},"gitHead":"c4411c155c00c84f0a9fd26e17d810dc6480171b","bugs":{"url":"https://github.com/bripkens/connect-history-api-fallback/issues"},"homepage":"https://github.com/bripkens/connect-history-api-fallback","_id":"connect-history-api-fallback@1.1.0","_shasum":"5a6dee82d9a648cb29131d3f9dd400ffa4593742","_from":".","_npmVersion":"2.7.5","_nodeVersion":"0.10.37","_npmUser":{"name":"bripkens","email":"bripkens.dev@gmail.com"},"maintainers":[{"name":"bripkens","email":"bripkens.dev@gmail.com"}],"dist":{"shasum":"5a6dee82d9a648cb29131d3f9dd400ffa4593742","tarball":"http://nexus.dui88.com:8081/nexus/content/groups/npm-all/connect-history-api-fallback/-/connect-history-api-fallback-1.1.0.tgz"},"directories":{}},"1.2.0":{"name":"connect-history-api-fallback","version":"1.2.0","description":"Provides a fallback for non-existing directories so that the HTML 5 history API can be used.","keyswords":["connect","html5","history api","fallback","spa"],"engines":{"node":">=0.8"},"main":"lib/index.js","scripts":{"test":"eslint lib/index.js test/index_test.js && nodeunit test/index_test.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/bripkens/connect-history-api-fallback.git"},"author":{"name":"Ben Ripkens","email":"bripkens.dev@gmail.com","url":"http://bripkens.de"},"contributors":[{"name":"Craig Myles","email":"cr@igmyles.com","url":"http://www.craigmyles.com"}],"license":"MIT","devDependencies":{"eslint":"^0.18.0","nodeunit":"^0.9.1","sinon":"^1.14.1"},"gitHead":"e5bc77c5b1e3c9d07647764675971d262e773ac9","bugs":{"url":"https://github.com/bripkens/connect-history-api-fallback/issues"},"homepage":"https://github.com/bripkens/connect-history-api-fallback#readme","_id":"connect-history-api-fallback@1.2.0","_shasum":"df4a8b05e40362f5b598a1c0a6aa012f21471d40","_from":".","_npmVersion":"3.7.3","_nodeVersion":"5.8.0","_npmUser":{"name":"bripkens","email":"bripkens.dev@gmail.com"},"maintainers":[{"name":"bripkens","email":"bripkens.dev@gmail.com"}],"dist":{"shasum":"df4a8b05e40362f5b598a1c0a6aa012f21471d40","tarball":"http://nexus.dui88.com:8081/nexus/content/groups/npm-all/connect-history-api-fallback/-/connect-history-api-fallback-1.2.0.tgz"},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/connect-history-api-fallback-1.2.0.tgz_1458587541331_0.6849686577916145"},"directories":{}},"1.3.0":{"name":"connect-history-api-fallback","version":"1.3.0","description":"Provides a fallback for non-existing directories so that the HTML 5 history API can be used.","keyswords":["connect","html5","history api","fallback","spa"],"engines":{"node":">=0.8"},"main":"lib/index.js","scripts":{"test":"eslint lib/index.js test/index_test.js && nodeunit test/index_test.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/bripkens/connect-history-api-fallback.git"},"author":{"name":"Ben Ripkens","email":"bripkens.dev@gmail.com","url":"http://bripkens.de"},"contributors":[{"name":"Craig Myles","email":"cr@igmyles.com","url":"http://www.craigmyles.com"}],"license":"MIT","devDependencies":{"eslint":"^0.18.0","nodeunit":"^0.9.1","sinon":"^1.14.1"},"gitHead":"709252d1b7afbf4b29748ec9a881684603d01f97","bugs":{"url":"https://github.com/bripkens/connect-history-api-fallback/issues"},"homepage":"https://github.com/bripkens/connect-history-api-fallback#readme","_id":"connect-history-api-fallback@1.3.0","_shasum":"e51d17f8f0ef0db90a64fdb47de3051556e9f169","_from":".","_npmVersion":"3.8.9","_nodeVersion":"6.2.0","_npmUser":{"name":"bripkens","email":"bripkens.dev@gmail.com"},"maintainers":[{"name":"bripkens","email":"bripkens.dev@gmail.com"}],"dist":{"shasum":"e51d17f8f0ef0db90a64fdb47de3051556e9f169","tarball":"http://nexus.dui88.com:8081/nexus/content/groups/npm-all/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz"},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/connect-history-api-fallback-1.3.0.tgz_1470552836120_0.7486736204009503"},"directories":{}}},"name":"connect-history-api-fallback","contributors":[{"name":"Craig Myles","email":"cr@igmyles.com","url":"http://www.craigmyles.com"}],"time":{"modified":"2017-05-10T02:33:34.556Z","created":"2013-05-18T13:47:54.775Z","0.0.1":"2013-05-18T13:47:58.244Z","0.0.2":"2013-07-15T20:04:56.899Z","0.0.3":"2013-07-16T20:02:55.758Z","0.0.4":"2013-07-16T20:13:33.457Z","0.0.5":"2014-10-01T16:54:01.659Z","1.0.0":"2015-04-11T06:06:30.740Z","1.1.0":"2015-04-16T06:38:05.983Z","1.2.0":"2016-03-21T19:12:23.525Z","1.3.0":"2016-08-07T06:53:57.855Z"},"readmeFilename":"README.md","homepage":"https://github.com/bripkens/connect-history-api-fallback#readme"}