【发布时间】:2016-01-31 10:47:23
【问题描述】:
我正在使用带有 express 框架的 nodejs 和 mongodb/mongoose 来存储我的数据。
我有一个注册函数,它可以做 4 件事。创建用户,创建令牌,将令牌分配给用户,最后发送电子邮件。
我最初使用效果很好的回调来做到这一点。我现在尝试使用承诺,我需要蓝鸟来做到这一点。但是,当一个承诺完成时,我需要在下一个承诺中使用返回的变量。
注册函数
module.exports.register = function(req, res) {
var input = req.body;
var newUser = new User ({
username: input.username,
email: input.email,
password: input.password,
active: false
});
var promise = newUser.save();
promise.then(function(user) {
return createToken('new', null, user._id);
}).then(function(token) {
user.tokens.push(token._id);
return user.save();
}).then(function(user) {
//Do Email Stuff
}).catch(function(err) {
return res.json("Could Not Register");
});
}
创建令牌函数
var createToken = function(type, expiry, userid) {
var token = uuid.v4();
return new Promise(function(resolve, reject) {
var newToken = Token({
type:type,
token: token,
expiry: expiry,
user: userid
});
var promise = newToken.save();
promise.then(function(token) {
resolve(token);
}).catch(function(err) {
reject(err);
});
});
};
所以我在做“user.tokens.push”的地方找不到用户。我在蓝鸟中读到我可以使用称为绑定的东西?然后使用“这个”。谁能告诉我如何正确地做到这一点。
此外,如果每个承诺中都有错误,我希望 catch 方法是动态的。而不仅仅是“无法注册”,而是“无法保存用户”或“无法保存令牌”,具体取决于哪个承诺失败。
如果有办法让这更干净,请告诉我。
【问题讨论】:
-
您正在引用 user.tokens.push 但您的代码示例中没有用户变量。也许示例不完整或者您忘记检索用户?
-
@shershen - 我想你已经确定了问题的重点
标签: javascript node.js mongodb express