我有一个程序,要映射/a/b/c.js网址=> /a:b:c.js文件;
koa version:2.3.0 koa static version: 4.0.1
最小再生产
const KOA = require('koa');
const koaStatic = require('koa-static');
staticApp = new KOA()
staticApp.use((ctx, next) => {
let path = ctx.path.split('/');
path = path.filter(segment => segment)
ctx.path = `/${path.join(':')}`;
next()
})
staticApp.use(koaStatic(__dirname))
staticApp.listen(8888);假设当前目录有一个a:b:c.js文件,当我在浏览器中访问locahost:8888\a\b\c.js时,程序总是得到错误UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 4): Error: Can't set headers after they are sent.
感谢您的帮助!
发布于 2017-07-17 10:47:01
试试这个:
const KOA = require('koa');
const koaStatic = require('koa-static');
staticApp = new KOA()
staticApp.use((ctx, next) => {
let path = ctx.path.split('/');
path = path.filter(segment => segment)
ctx.path = `/${path.join(':')}`;
return next();
});
staticApp.use(koaStatic(__dirname));
staticApp.listen(8888);看来,如果你想使用一个通用的函数作为中间件,你必须返回下一个函数。
发布于 2021-02-10 20:26:29
我发现为了解决这个问题,我不得不在某些路由上禁用一些中间件。在我的例子中,设置cookie的是passport.js中间件,我不希望通过/proxy路径的请求发生这种情况。这是我的解决方案:
const blacklistRoute = (fn, p) => async (ctx, next) => {
if (ctx.request.path.startsWith(p)) {
return next()
} else {
return fn(ctx, next)
}
}
const app = ...
app
.use(
blacklistRoute(
koaSession(passportCookieConfig, app),
'/proxy'
)
)https://stackoverflow.com/questions/45134394
复制相似问题