如何调试标头在Node.js中发送错误

时间:2011-09-10 15:22:16

标签: node.js header

我收到了很多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');
    }
});

1 个答案:

答案 0 :(得分:8)

Can't set headers after they are sent

是一个常见错误,这意味着您基本上会多次调用res.renderres.endres.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();
});