Javascript 错误:Can';t在发送后设置头文件-Node.js

Javascript 错误:Can';t在发送后设置头文件-Node.js,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,我已经尝试过了所有的答案,但是没有在我的代码中实现它们。我知道发生的情况是,在我呈现带有错误响应的页面之前,已经向用户发送了另一个响应。另一方面,我不知道如何解决这个问题 下面是我在脚本中抛出错误的方式: if (!player) { next(new HttpError(404, "Player not found")); // HttpError(status, message) } 要将此错误发送给用户,我使用sendHttpError.js方法,即: module.

我已经尝试过了所有的答案,但是没有在我的代码中实现它们。我知道发生的情况是,在我呈现带有错误响应的页面之前,已经向用户发送了另一个响应。另一方面,我不知道如何解决这个问题

下面是我在脚本中抛出错误的方式:

if (!player) {
      next(new HttpError(404, "Player not found")); // HttpError(status, message)
    }
要将此错误发送给用户,我使用sendHttpError.js方法,即:

module.exports = function(req, res, next){

    res.sendHttpError = function(error){
        if(res.req.headers['x-requested-with'] == 'XMLHttpRequest'){
            res.json(error);
        }else {
            res.render("error", {error: error});
        }
    };
    next();
};
这是一个稍微增强的express错误处理程序:

app.use(function (err, req, res, next) {

    if(typeof err == 'number'){
      err = new HttpError(err);
    }

    if(err instanceof HttpError){
      res.sendHttpError(err);
    } else{
      if(app.get('env') == 'development'){
        res.status(err.status || 500);
        res.render('error', {
          message: err.message,
          error: err
        });
      } else {
        log.error(err);
        err = new HttpError(500);
        res.sendHttpError(err);
      }
    }
  });
我对来自C++的节点和JS有点陌生,所以很难抓住这个混乱的面向事件的编程:


提前谢谢你

最有可能的问题在于:

if (!player) {
  next(new HttpError(404, "Player not found")); // HttpError(status, message)
}
在下一个()调用之前放置一个返回

如果没有返回,将调用下一个函数,但路由处理程序也将继续执行。您可能有一个如下所示的处理程序:

app.get('/foo', function(req, res, next){
    if (!player) 
      next(new HttpError(404, "Player not found")); // HttpError(status, message)

     res.send({res:'ok'});

});    
将调用下一个函数并返回错误处理程序。也许它会向客户机写入响应。然后在处理程序中调用normal res.send,您会得到“无法设置处理程序错误”

更可能的情况是先调用res.send函数,然后在express错误处理程序中引发错误