【发布时间】:2018-12-27 09:33:15
【问题描述】:
我正在尝试执行此代码:
UserSchema.methods.generateAuthToken = function () {
const user = this;
const access = 'auth';
const token = jwt.sign({_id: user._id.toHexString(), access}, 'abc123');
user.tokens.push({access, token});
user.save().then(() => {
return token;
});
};
在我的快递文件中,我有以下代码:
app.post('/users', (req, res) => {
const body = _.pick(req.body, ['email', 'password']);
const user = new User(body);
user.save().then(() => {
return user.generateAuthToken();
}).then((token) => {
res.header('x-auth', token).send(user);
}).catch((err) => {
console.log(err);
res.status(400).send(err);
});
});
问题是从第一个文件中的user.save().then() 调用返回的令牌永远不会到达快速代码user.generateAuthToken()。是什么原因,应该如何解决?
【问题讨论】:
-
为什么要保存在
generateAuthToken()方法中?通过省略user.save()副作用并简单地返回token,在 post 处理程序中返回单个.save()将完成您需要的所有节省。作为奖励,您的承诺链接问题将消失。
标签: javascript express mongoose promise