Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js nodejs(koa):Can';t在发送邮件后设置邮件头_Node.js_Koa - Fatal编程技术网

Node.js nodejs(koa):Can';t在发送邮件后设置邮件头

Node.js nodejs(koa):Can';t在发送邮件后设置邮件头,node.js,koa,Node.js,Koa,我有一个程序想要映射/a/b/c.jsurl=>/a:b:c.js文件 膝关节炎版本:2.3.0 膝关节炎静态版本: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.filte

我有一个程序想要映射
/a/b/c.js
url=>
/a:b:c.js
文件


膝关节炎版本:2.3.0
膝关节炎静态版本: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
时, 程序总是出错
未处理的PromisejectionWarning:未处理的承诺拒绝(拒绝id:4):错误:发送后无法设置头。

谢谢你的帮助

试试这个:

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);

如果你想使用一个公共函数作为中间件,你必须返回下一个函数。

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

constblacklistproute=(fn,p)=>async(ctx,next)=>{
if(ctx.request.path.startsWith(p)){
返回下一个()
}否则{
返回fn(ctx,下一个)
}
}
常量应用=。。。
应用程序
.使用(
黑名单路线(
koaSession(passportCookieConfig,应用程序),
“/代理”
)
)

您知道作为中间层的常用函数必须返回下一个函数的原因吗?thk@Qiu我认为这是因为您必须从中间件返回一个与其他中间件一起工作的承诺。下一次你要回报一个承诺,当你回报它的时候,你也要回报一个承诺。有关更多讨论,请参阅此问题