发送多个mongo查询后无法设置标头

时间:2017-10-30 02:00:34

标签: node.js mongodb express mongoose http-headers

我收到发送错误后无法发送标头。好吧,我已经尝试删除我能做的一切,但它失败了。我的路线在下面,我知道这不是最有效的方式,但不知道更好的方法。

我理想情况下能够执行每个空行所在的res.redirect("/dashboard/it/model");,这就是我最初所拥有的。我删除了它们并遇到了同样的错误,所以我注释掉了setRender,这几乎是res.render()。我不确定我还能改变什么来使这项工作。我需要简单地完成每个查询,这样我就不必创建13条不同的路由。如果需要的话,我可以做到这一点,而是把它放在一个地方。

路线:

// delete model  
  app.delete('/dashboard/it/model/delete/:id',
    // setRender('dashboard/it/model'),
    setRedirect({auth: '/login'}),
    isAuthenticated,
    (req, res, next) => {
      AP.findByIdAndRemove(req.params.id, function(err){
      if(err){

      } else {

      }
      });
      Cable.findByIdAndRemove(req.params.id, function(err){
      if(err){

      } else {

      }
      });
      DeskPhone.findByIdAndRemove(req.params.id, function(err){
      if(err){

      } else {

      }
      });
      Desktop.findByIdAndRemove(req.params.id, function(err){
      if(err){

      } else {

      }
      });
      Laptop.findByIdAndRemove(req.params.id, function(err){
      if(err){

      } else {

      }
      });
      MobilePhone.findByIdAndRemove(req.params.id, function(err){
      if(err){

      } else {

      }
      });
      Monitor.findByIdAndRemove(req.params.id, function(err){
      if(err){

      } else {

      }
      });
      Printer.findByIdAndRemove(req.params.id, function(err){
      if(err){

      } else {

      }
      });
      Projector.findByIdAndRemove(req.params.id, function(err){
      if(err){

      } else {

      }
      });
      Router.findByIdAndRemove(req.params.id, function(err){
      if(err){

      } else {

      }
      });
      Switch.findByIdAndRemove(req.params.id, function(err){
      if(err){

      } else {

      }
      });
      Tablet.findByIdAndRemove(req.params.id, function(err){
      if(err){

      } else {

      }
      });
      Custom.findByIdAndRemove(req.params.id, function(err){
      if(err){

      } else {

      }
      res.redirect("/dashboard/it/model");
      });
      next();
    },
    dashboard.getDefault);

1 个答案:

答案 0 :(得分:0)

这是我看到的一个简单问题(不知道这是唯一的问题,因为你遗漏了很多代码)是你正在做res.redirect()并且你正在调用next() 。你需要做一个或另一个,而不是两者。

res.redirect()发送302响应。然后,调用next()允许其他中间件或处理程序也处理请求,其中一个也可能发送响应。尝试向同一请求发送多个响应是导致您看到错误的原因。

因此,如果您要重定向,请不要再拨打电话。

此外,如果你要像res.redirect()next()一样,那么你也不能在任何if/else条款中发送回复。由于您没有解释该代码的目的,我们无法猜测它应该如何工作。这里的关键原则是每个请求只发送一个响应。发送任意多个会触发您看到的错误。