未处理的拒绝MongoError与bluebird.js

时间:2016-07-19 09:27:43

标签: node.js mongoose mean-stack bluebird

我有一个MEAN堆栈应用程序,我正在尝试创建一个用户。我正在使用Bluebird.js作为承诺库,但是我收到了一个奇怪的未处理拒绝错误,尽管我正在捕捉它。
这是我的代码:

controllers/users.js

module.exports = {
  // create user from a JSON object
  createUser: function(user) {
    var email = user.email;
    var password = user.password;
    if (!password || !email) {
      return Promise.reject(errors.missingInfo);
    }
    // check if the token doesn't exist then add it
    if (!user.token) {
      user.token = uuid.v4();
    }
    if (!user.isActive) {
      user.isActive = true;
    }

    return userModel.createAsync(user).then(function(newUser) {      
      newUser = newUser.toObject();
      delete newUser.password;
      return newUser;
    }).catch(function(/*err*/) {
      throw errors.alreadyUsed;
    });
  }
}

routes/users.js

router.post('/', function(req, res) {
  ctrl.createUser(req.body).then(function(user) {
    res.json(user);
  }).catch(function(err) {
    if (err.error) {
      if (err.status) {
        res.status(err.status);
      }
      else {
        res.status(500);
      }
      res.json(err);
    }
    else {
      var message = err instanceof Error ? err.message : err;
      res.status(500).json({
        error: message
      });
    }
  });
})

因此,当我测试我输入已使用的用户名或电子邮件的情况时,前端会出错,但服务器的控制台会以红色显示以下错误:

Unhandled rejection MongoError: E11000 duplicate key error collection: coll.users index: email_1 dup key: { : "email@example.com" }

我尝试将行throw errors.alreadyUsed;更改为return Promise.reject(errors.alreadyUsed);,但结果相同。

0 个答案:

没有答案