首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nodejs(Koa):发送后不能设置头部

nodejs(Koa):发送后不能设置头部
EN

Stack Overflow用户
提问于 2017-07-17 08:03:39
回答 2查看 1.5K关注 0票数 1

我有一个程序,要映射/a/b/c.js网址=> /a:b:c.js文件;

koa version:2.3.0 koa static version: 4.0.1

最小再生产

代码语言:javascript
复制
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.

感谢您的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-17 10:47:01

试试这个:

代码语言:javascript
复制
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);

看来,如果你想使用一个通用的函数作为中间件,你必须返回下一个函数。

票数 3
EN

Stack Overflow用户

发布于 2021-02-10 20:26:29

我发现为了解决这个问题,我不得不在某些路由上禁用一些中间件。在我的例子中,设置cookie的是passport.js中间件,我不希望通过/proxy路径的请求发生这种情况。这是我的解决方案:

代码语言:javascript
复制
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'
    )
  )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45134394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档