J'ai une API Node.js avec un mongoDB. Il y a un chemin qui crée un utilisateur et doit hacher le mot de passe, pour cela j'utilise le paquetage bcryptjs.Node.js Mongoose Promise se perdant
l'itinéraire ressemble à ceci:
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'});
}
})
et 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);
});
}
});
}
});
};
Je reçois une erreur disant: "Impossible de lire la propriété 'puis' undefined", qui me dit que Je ne reçois pas de promesse d'addUser. J'ai regardé et bcryptjs malheureusement ne pas utiliser des promesses, cependant, Mangoose fait. (en ajoutant ceci:
var mongoose = require('mongoose').Promise = Promise;
n'a pas aidé)
J'ai essayé envelopper la fonction dans une promesse de rejeter et de résoudre, mais qui donne cette erreur: « Erreur de type: résolveur Promesse non définie est pas une fonction ".
Comment puis-je obtenir la promesse que la fonction save() de mongoose retourne au .then() dans la route de publication? J'ai essayé d'ajouter le retour devant la fonction de deux bcrypt mais cela n'a pas fonctionné non plus.
Toutes les suggestions sont les bienvenues!
Vous ne renvoyez pas de formulaire Promise votre 'this.addUser'. –
pour être clair, vous ne retournez ** rien ** de 'this.addUser' –
@Jaromanda X oui je vois que maintenant, je suis nouveau aux promesses et je pense que je me suis perdu par l'API qui ne supporte pas les promesses .. –