Могу ли я иметь атрибуты кеа-статического обслуживания на пользовательском пути (например,/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. если вы все еще заинтересованы.