Ich habe eine Node.js API mit einem MongoDB. Es gibt eine Route, die einen Benutzer erstellt und das Passwort hashen muss, dafür benutze ich das bcryptjs-Paket.Node.js Mungo-Versprechen gehen verloren
die Route sieht wie folgt aus:
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'});
}
})
und 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);
});
}
});
}
});
};
ich einen Fehler zu sagen: "nicht Eigentum lesen kann 'dann' undefinierter", die mir sagt, dass Ich bekomme kein Versprechen von addUser. Ich schaute und bcryptjs verwendet leider keine Versprechen, aber Mungo tut. (Hinzufügen dieses:
var mongoose = require('mongoose').Promise = Promise;
hat nicht geholfen)
Ich habe versucht, in ein Versprechen die Funktion Umwickeln mit verwerfen und beheben, aber das gibt diesen Fehler: „Typeerror: Versprechen Resolver undefiniert ist keine Funktion ".
Wie bekomme ich das Versprechen, dass die Funktion save() von Mungo wieder auf die .then() in der Post-Route zurückkehrt? Ich versuchte, Rückkehr vor den zwei bcrypt Funktion hinzuzufügen, aber das funktionierte auch nicht.
Irgendwelche Vorschläge sind willkommen!
Sie geben kein Versprechen aus Ihrem 'this.addUser' zurück. –
um klar zu sein, Sie nicht ** alles ** von 'this.addUser' zurückgeben –
@Jaromanda X ja ich sehe das jetzt, ich bin neu zu versprechen und ich denke, ich verlor durch die API, die Versprechen nicht unterstützt .. –