Je construis une application node.js en utilisant mongoDB. Je dois créer un objet livre, l'enregistrer et l'ajouter à la liste des livres d'un utilisateur. Je dois alors avoir un "sauvegarder" pour le livre puis un second pour l'utilisateur (pour lequel la liste des livres a été mise à jour).node.js et mongoose: comment appeler 2 méthodes de callback imbriquées à sauvegarder dans une liste de collection et imbriquée?
je fais quelque chose comme:
book = new Book(); // I'm using moogoose
book.title = req.params.title
book.save(function(err){
if(!err){
jsonObj = {"title":book.title};
res.writeHead(200, {'content-type': 'application/json'});
res.write(JSON.stringify(jsonObj));
res.end();
// Add book in user things list
user.books.push(book);
user.save(function(error){
if(error) {
console.log(JSON.stringify({ "error" : "internal error" }));
}
});
} else {
jsonObj = { "error" : "internal error while saving book" };
res.writeHead(200, {'content-type': 'application/json'});
res.write(JSON.stringify(jsonObj));
res.end();
}
console.log(JSON.stringify(jsonObj));
});
Il semble que, parfois, le livre est enregistré dans le DB et la liste non enregistrées dans les livres de l'utilisateur, et il est parfois l'inverse. Je ne suis pas familier avec la méthode de callback asynch (imbriquée en plus de ça ...).
Je fais sûrement quelque chose de mal ... Quelle est la meilleure façon de faire cela?
Si une erreur survient lors de l'enregistrement du livre, votre livre ne sera pas ajouté à la liste des utilisateurs. – Raynos
@Raynos, mais parfois le livre est enregistré seul mais pas enregistré dans la liste des livres de l'utilisateur. – Luc
c'est ce que j'ai dit. Le livre peut être sauvegardé seul, mais une erreur différente empêche le livre d'être ajouté à la liste des utilisateurs. Donc, essayez 'console.log (err)' dans votre bloc else. – Raynos