我有一個Node.js API和mongoDB。有一條路由創建一個用戶並需要散列密碼,爲此我使用bcryptjs軟件包。Node.js Mongoose Promise迷失
的路線是這樣的:
router.route('/user')
.post(function(req, res) {
if(req.body.password === req.body.passwordConfirm) {
userManager.addUser(req.body)
.then(function(response) { // waiting for the result of the mongoDB save
res.send({data:response});
});
} else {
res.send({err:'passwords do not match'});
}
})
和userManager.addUSer:
this.addUser = function(userobject) {
bcrypt.genSalt(10, function(err, salt) { // generate a salt
if(err !== null) {
console.log(err);
} else {
bcrypt.hash(userobject.password_hash, salt, function(err, hash) { // hash pw
if(err !== null) {
console.log(err);
else {
userobject.password_hash = hash; // store hash in user obj
var user = new User(userobject);
return user.save().catch(function(err){ // save user in mongoDB
console.log(err);
});
}
});
}
});
};
我得到一個錯誤說: 「不能讀取屬性 '然後' 未定義」,它告訴我,我沒有收到addUser的承諾。我看着bcryptjs悲傷地不使用承諾,但是,貓鼬的確如此。 (添加此:
var mongoose = require('mongoose').Promise = Promise;
沒有幫助)
我試圖在拒絕和解決一個承諾包裝的功能,但它給出了這個錯誤:「類型錯誤:無極解析器未定義不是一個函數」。
如何獲得mongoose的save()函數返回到post過程中的.then()的承諾?我試圖在兩個bcrypt函數前添加return,但是這也不起作用。
歡迎任何建議!
您不會從您的'this.addUser'返回一個Promise窗體。 –
要清楚,你不會從'this.addUser'返回任何** ** –
@Jaromanda X是的,我現在看到,我對承諾是新的,我認爲我失去了API,不支持承諾.. –