2017-02-09 4 views
0

Mon application Feathers.js a un questionnaire et j'essaie d'enregistrer les résultats pour chaque entrée. Voici mon code côté client:Comment sauvegarder les données mongoose après PATCH?

$.ajax({ 
    url: "/answer", 
    type: "PATCH", 
    data: newAnswer, 
    success: function() { 
    console.log("Answer submitted!"); 
    }, 
    error: function() { 
    console.log("Error submitting answer."); 
    } 
}); 

Et voici mon code côté serveur:

app.patch("/answer", (req, res) => { 
    users.patch(user[0]._id, req.body); 
}); 

Actuellement, seule la dernière entrée est enregistrée. Qu'est-ce que je fais mal?

EDIT: Voici mon schéma

answers: { 
    yourOrganization: { 
    page1: { 
     idOfParameterInClient: response 
    } 
    } 
} 

Le idOfParameterInClient et response sont dynamiques. Dans page1, il existe un certain nombre de paires clé/valeur. Comment puis-je les garder?

+0

Ce que vous faites est de fusionner l'objet utilisateur avec l'objet 'newAnswer'. Toute propriété de l'objet 'newAnswer' remplacera la même propriété dans l'objet utilisateur. – Daff

+0

@Daff J'ai ajouté plus de clarification à ma question/problème. –

Répondre

0

patch ne fait pas de fusion récursive (MongoDB non plus). Si c'est ce que vous cherchez, vous devrez le faire par vous-même. en utilisant le deepmerge package:

const merge = require('deepmerge'); 

app.patch("/answer", (req, res) => { 
    const id = user[0]._id; 

    users.get(id).then(user => { 
    const mergedUser = merge(user.toObject(), req.body); 

    users.patch(id, mergedUser); 
    }); 

}); 
+0

Je continue à essayer ceci et des variations de ceci mais rien ne se montre dans la mangouste. Regarder 'mergedUser' dans la console est bizarre parce que je vois juste les fonctions ainsi que les données. –

+0

J'ai mis à jour ma réponse. Si vous utilisez Mongoose avec plumes-mongoose avant v4.0.0 vous devez appeler '.toObject' d'abord – Daff

+0

Je ne savais pas que j'utilisais encore des modules obsolètes! Merci pour le conseil. Je vais garder ce que j'ai fait depuis qu'il a fonctionné tel quel mais j'accepterai votre réponse comme réponse. –

0

@Daff m'a mis sur la bonne voie. À la fin, object-patch m'a permis de faire des fusions récursives. Voici mon code:

const patch = require("object-patch"); 

app.patch("/answer", (req, res) => { 
    const id = user[0]._id; 

    users.get(id).then(user => { 
    patch(user, req.body); 
    users.update(user._id, user); 
    }); 
});