我正在使用Node.js和ExpressJS来保存猫鼬模型。我收到错误Error: Can't set headers after they are sent.
我认为它与我的路线中与res.redirect("/dashboard/it/model");
冲突的行setRedirect({auth: '/login'}),
有关,setRedirect中的代码标有以下内容。 setRedirect来自名为middleware-responder
的中间件,它作为我用来创建Stripe用户帐户的模板的一部分。据我所知,我不能删除它。我的GitHub repo我已经提交了所有非测试文件且相关的文件(没有不必要的视图,而不是已有的视图)
保存模型
if(type=="aps"){
var newAccessPoint = {
name: name,
manufacturer: manufacturer,
model: model,
range: range,
bands: bands,
channel: channel,
poe: poe,
notes: notes,
signout: signout,
author:author
};
// Create a new access point and save to DB
AP.create(newAccessPoint, function(err, newlyCreated){
if(err){
console.log(err);
} else {
//redirect back to models page
res.redirect("/dashboard/it/model");
}
});
}
路线
app.post('/dashboard/it/model/new',
setRender('dashboard/it/modelCreate'),
setRedirect({auth: '/login'}),
isAuthenticated,
dashboard.getDefault,
(req, res) => {
setRedirect代码
exports.setRedirect = function(options){
return function(req, res, next){
if(req.redirect){
req.redirect = _.merge(req.redirect, options);
} else {
req.redirect = options;
}
next();
};
};
setRender代码
exports.setRender = function(view){
return function(req, res, next){
req.render = view;
next();
};
};
答案 0 :(得分:0)
发生这种情况是因为您在关闭连接时尝试向客户端发送响应。
很难说您向我们显示您的代码的方式,但似乎您正在重定向到选项,然后在同一请求中您将重定向到仪表板/它/模型
答案 1 :(得分:0)
我从github中提取你的代码。
我认为错误信息很明确。在您的getDefault()
中间件中,您正在呈现响应,因此服务器开始向您的客户端发送数据,并在您尝试将其重定向到另一个网址后。这就是为什么当你的评论中间件都很好地工作时。