私はmongoDBを持つNode.js APIを持っています。ユーザーを作成し、パスワードをハッシュする必要があるルートがあります。このためには、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は悲しいことに約束を使わないが、mongooseはそうする。 (この追加:
var mongoose = require('mongoose').Promise = Promise;
は役立ちませんでしたが)
私は拒否し、解決すると約束して機能をラップしようとしたが、それは、このエラーを与える:「例外TypeError:約束のリゾルバ未定義のは関数ではありません"
mongooseのsave()関数がポストルートの.then()に返されるという約束をどのように取得できますか?私は2つのbcrypt関数の前に戻り値を追加しようとしましたが、どちらもうまくいきませんでした..
どのような提案も大歓迎です!
あなたは 'this.addUser'というPromiseフォームを返しません。 –
をクリアするには、あなたは 'this.addUser'から** anything **を返さないでください –
@Jaromanda Xはい私は今、私は約束を新しくしています。私は約束をサポートしていないAPIによって迷っていると思います.. –