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

如何调试Node.js中发送的头错误,node.js,header,Node.js,Header,我收到很多发送后无法设置标题的错误,而且他们似乎从未在我的app.js中给我行号,这正常吗?人们如何调试这些错误 我抛出headers错误的代码看起来是这样的,隐藏行号是不是有点奇怪 app.get('/', function(req, res, next) { if (req.param('q')) { searchProvider.search( req.param('q'), function( error, resu

我收到很多
发送后无法设置标题的错误,而且他们似乎从未在我的
app.js中给我行号,这正常吗?人们如何调试这些错误

我抛出headers错误的代码看起来是这样的,隐藏行号是不是有点奇怪

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

发送后无法设置标题

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

您可能在写入标题后调用res.send。我是否应该调用某个函数而不是
next()
?像
return
?@BenHumphreyo要么
return res.render(…)
要么
否则{next()}
会解决这个问题