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

Ben*_*eys 3 header node.js

我收到了很多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');
    }
});
Run Code Online (Sandbox Code Playgroud)

Ray*_*nos 8

Can't set headers after they are sent

是一个常见错误,这意味着您基本上是打电话res.render,res.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();
});
Run Code Online (Sandbox Code Playgroud)