我可以在自定义(例如,/static/)路径中拥有koa-static服务资产吗?



https://github.com/koajs/static上的文档和我个人尝试koa-static的经验让我相信,您可以只能从应用程序的根URL提供文件。

例如:

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

给定上述serve的使用,访问文件./some/dir/something.txt的URL将是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)

要将中间件重新定位到应用程序的另一部分,可以使用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路径或参数匹配

当然可以。正如公认的答案所说,诀窍是使用koa-mount和koa-static。虽然我不明白他为什么不提供一个实际静态文件的例子。这适用于我(在Koa2):

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

两个文件夹(公共和静态)都在我的项目根目录下。但是第一个是在用户访问/时提供的,而第二个是在用户访问/static时提供的。就是这样。

您可以使用koa-static-folder。如果你还感兴趣的话。

相关内容

  • 没有找到相关文章

最新更新