diff --git a/example/spa/.local-web-server.json b/example/spa/.local-web-server.json index d5db15c..4921b3c 100644 --- a/example/spa/.local-web-server.json +++ b/example/spa/.local-web-server.json @@ -1,3 +1,4 @@ { - "spa": "index.html" + "spa": "index.html", + "no-cache": true } diff --git a/example/spa/image.jpg b/example/spa/image.jpg new file mode 100644 index 0000000..953ed0f Binary files /dev/null and b/example/spa/image.jpg differ diff --git a/example/spa/index.html b/example/spa/index.html index 9a46a23..78bf089 100644 --- a/example/spa/index.html +++ b/example/spa/index.html @@ -7,6 +7,8 @@
  • /login
  • /search
  • +

    Found asset:

    +

    Missing asset (should 404):

    diff --git a/lib/middleware-stack.js b/lib/middleware-stack.js index 4b787b2..e1103e5 100644 --- a/lib/middleware-stack.js +++ b/lib/middleware-stack.js @@ -214,20 +214,23 @@ class MiddlewareStack extends Array { } /* for any URL not matched by static (e.g. `/search`), serve the SPA */ - addSpa (spa) { + addSpa (spa, assetTest) { this.push({ optionDefinitions: { name: 'spa', alias: 's', type: String, typeLabel: '[underline]{file}', description: 'Path to a Single Page App, e.g. app.html.' }, middleware: function (cliOptions) { - spa = t.isDefined(cliOptions.spa) ? cliOptions.spa : spa + spa = cliOptions.spa || spa || 'index.html' + assetTest = new RegExp(cliOptions['spa-asset-test'] || assetTest || '\\.') if (spa) { - const historyApiFallback = require('koa-connect-history-api-fallback') + const send = require('koa-send') + const _ = require('koa-route') debug('SPA', spa) - return historyApiFallback({ - index: spa, - verbose: cliOptions.verbose + return _.get('*', function spaMw (ctx, route, next) { + const root = path.resolve(cliOptions.directory || process.cwd()) + debug(`SPA request. Route: ${route}, isAsset: ${assetTest.test(route)}`) + return send(ctx, assetTest.test(route) ? route : spa, { root: root }).then(next) }) } } diff --git a/package.json b/package.json index a88acf4..4440fc8 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,6 @@ "koa-compose": "^3.1.0", "koa-compress": "^1.0.9", "koa-conditional-get": "^1.0.3", - "koa-connect-history-api-fallback": "~0.3.0", "koa-convert": "^1.2.0", "koa-etag": "^2.1.1", "koa-json": "^1.1.3", @@ -53,7 +52,6 @@ "path-to-regexp": "^1.5.0", "reduce-flatten": "^1.0.0", "stream-log-stats": "^1.1.3", - "string-tools": "^1.0.0", "test-value": "^2.0.0", "typical": "^2.4.2" },