我收到了很多Can't set headers after they are sent
错误,他们似乎从来没有给我app.js
中的行号,这是正常的吗?人们如何调试这些错误?
我抛出标题错误的代码看起来像是这样,它是否会隐藏行号呢?
app.get('/', function(req, res, next) {
if (req.param('q')) {
searchProvider.search(
req.param('q'),
function( error, results) {
res.render('search', {
locals: {
results: results,
q: req.param('q')
},
});
}
);
} else {
res.render('index');
}
});
答案 0 :(得分:8)
Can't set headers after they are sent
是一个常见错误,这意味着您基本上会多次调用res.render
,res.end
或res.send
。这意味着您尝试将多个HTTP响应写入一个HTTP请求(这是无效的)。
此错误的一个常见原因是在一个中间件中调用next
两次。
也许你有像
这样的中间件app.all("*", function(req, res, next) {
// not logged in
if (!req.user) {
res.render("loginError");
}
// bad accidental next call!! Will call next after rendering login error
next();
});