From 9dcccec17719837773f584a0c60a0faf9beb506b Mon Sep 17 00:00:00 2001 From: Lloyd Brookes Date: Sat, 18 Jun 2016 11:39:25 +0100 Subject: [PATCH] added 'spa-asset-test' config option. Fixes #36 --- example/spa/.local-web-server.json | 3 ++- example/spa/image.jpg | Bin 0 -> 2313 bytes example/spa/index.html | 2 ++ lib/middleware-stack.js | 15 +++++++++------ package.json | 2 -- 5 files changed, 13 insertions(+), 9 deletions(-) create mode 100644 example/spa/image.jpg 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 0000000000000000000000000000000000000000..953ed0f252e9037dfa3d0c64ffa24aeec96320f3 GIT binary patch literal 2313 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 literal 0 HcmV?d00001 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" },