我有一个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);
,但结果相同。