javascript - 未处理的 promise 拒绝错误: Can't set headers after they are sent

标签 javascript node.js mongodb mongoose promise

我想做一个 if else 返回(对于 conrtole),但是:“UnhandledPromiseRejectionWarning:未处理的 promise 拒绝(拒绝 id:1):错误:发送后无法设置 header 。 ”

exports.delete = function (req, res) {
  Parking.findById(req.params.id).exec()
    .then(function (parking) {
      if (userController.ensureAuthorized(req, 'Director', parking.id)) {
        return parking;
      }
      return res.status(403).send({msg: 'unauthorized'});

    })
    .then(function (parking) {
      User.update().exec();
      return parking;
    })
    .then(function (parking) {
       return Parking.remove({_id: parking._id}).exec();
    })
    .then(function () {
      res.status(200).json({msg: 'Ok ! Parkink remove'});
    })
    .catch(function (err) {
      return res.status(400).send(err);
    });
};

最佳答案

问题是,在返回 res.status(403) 后,promise 链不会自动停止。最终,它将命中 res.status(200) 并导致错误。

您可以稍微重写您的 promise 链以防止这种情况发生。我不确定 User.update().exec() 的目的是什么,但我假设您想调用它并等待它的 promise 得到解决,然后再继续:

exports.delete = function (req, res) {
  Parking.findById(req.params.id).exec()
    .then(function (parking) {
      if (userController.ensureAuthorized(req, 'Director', parking.id)) {
        return User.update(...).exec().then(function() {
          return Parking.remove({_id: parking._id}).exec();
        }).then(function() {
          return res.status(200).json({msg: 'Ok ! Parkink remove'});
        });
      } else {
        return res.status(403).send({msg: 'unauthorized'});
      }
    }).catch(function (err) {
      return res.status(400).send(err);
    });
};

关于javascript - 未处理的 promise 拒绝错误: Can't set headers after they are sent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43366237/

相关文章:

javascript - 在我的例子中,foreach 中的 Mongoose promise 失败了

javascript - 2个表,需要为每个匹配行设置最大高度的行

javascript - 在 MongoDB 中通过用户 ID 获取集合

javascript - 使用 Nodejs 的 Moment.js Sql 日期时间转换

javascript - Node .js + MongoDB : MongoError: cursor killed or timed out

javascript - 丹麦地址的正则表达式

javascript - Bootstrap 选项卡式表单未正确对齐

node.js - NodeJs 如何使用 Sequelize?

java - 在 Spring MVC 中 Autowiring MongoRepository

mongodb - 将 mongodb 聚合函数转换为 ReactiveMongo 和 scala