Могу ли я иметь атрибуты кеа-статического обслуживания на пользовательском пути (например,/static/)?

Документы в https://github.com/koajs/static, и мой личный опыт, пробующий koa-static, заставил меня поверить, что вы можете только подавать файлы с корневого URL вашего приложения.

Например:

app.use(serve('./some/dir/'));

Учитывая использование выше serve, URL-адрес для доступа к файлу ./some/dir/something.txt будет localhost:3000/something.txt. Кажется, что нет способа настроить мое приложение таким образом, чтобы один и тот же файл (и все другие файлы в том же каталоге) обслуживался вместо localhost:3000/static/something.txt.

Я новичок в Node и в Koa, поэтому я только начал погружаться в это, и я, вероятно, пропустил что-то действительно очевидное.

Я попытался использовать koa-route для достижения этого:

app.use(route.get('/static/*'), serve(__dirname + '/some/dir'));

Но после запроса /static/something.txt мне было встречено следующее:

  TypeError: Cannot read property 'apply' of undefined
      at Object.<anonymous> (/Users/me/example/src/node_modules/koa-route/index.js:34:18)
      at GeneratorFunctionPrototype.next (native)
      at onFulfilled (/Users/me/example/src/node_modules/koa/node_modules/co/index.js:64:19)
      at /Users/me/example/src/node_modules/koa/node_modules/co/index.js:53:5
      at Object.co (/Users/me/example/src/node_modules/koa/node_modules/co/index.js:49:10)
      at Object.toPromise (/Users/me/example/src/node_modules/koa/node_modules/co/index.js:117:63)
      at next (/Users/me/example/src/node_modules/koa/node_modules/co/index.js:98:29)
      at onFulfilled (/Users/me/example/src/node_modules/koa/node_modules/co/index.js:68:7)
      at /Users/me/example/src/node_modules/koa/node_modules/co/index.js:53:5
      at Object.co (/Users/me/example/src/node_modules/koa/node_modules/co/index.js:49:10)

Ответ 1

Чтобы переместить промежуточное программное обеспечение в другую часть вашего приложения по-разному, вы можете использовать koa-mount.

'use strict';
const koa = require('koa');
const mount = require('koa-mount');

const app = koa();
app.use(function* () { this.body = 'Hello, world'; });
app.use(mount('/foo', function*() { this.body = 'Hello, foo'; }));

app.listen(3000);

curl localhost:3000
> 'Hello, world'
curl localhost:3000/foo
> 'Hello, foo'

koa-router не поддерживает пути или соответствие параметров regex.

Ответ 2

Конечно. И, как говорится в принятом ответе, трюк использует koa-mount вместе с koa-static. Хотя я не понимаю, почему он не предоставляет пример с фактическими статическими файлами. Это работает для меня (в Koa2):

.use(serve('public'))
.use(mount('/static', serve('static')))

Обе папки (общедоступные и статические) находятся в моем корневом каталоге проекта. Но первая подана, когда пользователь получает доступ к /, а второй - к /static. Это все.

Ответ 3

вы можете использовать koa-static-folder. если вы все еще заинтересованы.