Node.js et JSON.stringify manquant de certaines valeurs/paramètres de l'objet
Peut-être que je ne comprends pas javascript/café script ainsi que je le pensais, mais quand je fais cela:
that.thing = thing
that.thing.title = "some title"
console.log(that.thing.title)
console.log(JSON.stringify(that.thing)
- Je obtenir de sortie:
quelque titre
{"creation_date":"2011-09-09T00:40:03.742 Z","_id":"4e6960638ec80519a0000013"}
Le problème est que je semble perdre le titre de propriété, quand je fais les stringify (et plus tard, lorsque la fonction existe, je semble avoir d'autres problèmes intéressants qui, je suppose avoir à faire avec " qui " et ce imbriquée à l'intérieur de multiples fxn appels).
(J'ai dû faire une moche solution pour le moment où je le fais.chose = {} pour résoudre mon problème. Les autres problèmes que j'ai eu à résoudre avant inclus node.js + async + mangouste.trouver et c'est tout à l'intérieur asynchrone.findEach)
Quand je fais
console.log(that.thing.toJSON)
J'obtiens:
function () { return this.toObject(); }
Grâce.
that.thing
n'est pas une horrible getter/setter chose?OriginalL'auteur user885355 | 2011-09-09
Vous devez vous connecter pour publier un commentaire.
C'est parce que le Modèle.find() retourne un MongooseDocument. Si vous voulez un simple objet JavaScript, vous pouvez ajouter des propriétés, vous devez spécifier le "lean" en option:
Ce sera beau travail, à condition que vous n'avez pas besoin de sauver la chose objet nouveau (ce n'est pas un MongooseDocument, pas de getters et les setters sont appliquées).
.save()
ça ne marcherait pas. Vous seriez alors plutôt fairething.toObject()
de lamongoose
API. D'entrée de votre blog conduis-moi et permettez-moi de trouver cela. Merci.OriginalL'auteur Lee Crossley
Puisque vous parlez de la mangouste, il se peut que
that.thing
est un objet spécial avec certaines propriétés spécifiques.Il y a deux choses qui pourraient avoir une incidence sur de cette.
Soit
thing
est en fait un getter/setter avec une horrible logiqueOu, plus probablement,
thing
a un.toJSON
méthode qui écrit l'objet en json et vous havn't augmentée ou supprimé cette méthode pour faireJSON.stringify
travail.Par défaut de mon
JSON.stringify
appelle la.toJSON
méthode, si elle existe.Ainsi, une simple
console.log(that.thing.toJSON);
doivent identifier votre problèmeDe toute façon ce que vous avez vraiment quelque chose à faire lorsque vous voulez enregistrer les données et assurez-vous que les journaux de ce que les données actuelles sont dans un blocage de la mode.
console.warn(util.inspect(that.thing));
depuis qu'il a
toJSON
méthode de la choseJSON.stringify
est la sérialisation estthat.thing.toObject()
c'est pourquoi son brisé.Je vois, donc idéalement, j'aimerais avoir à modifier JSON.stringify de vérifier pour la .la méthode toJSON comme vous le faites. Je ne suis pas 100% sûr de savoir comment je le ferait mais je vais regarder. Si j'ai voulu lire le source pour de tels appels au nœud recommanderiez-vous aller juste pour le dépôt github / docs? @Raynos
non-non. Vous avez besoin de meurtre
.toJSON
ou n'utilisez pas deJSON.stringify
pour l'enregistrement des données. Utilisez simplementconsole.warn(util.inspect(obj))
OriginalL'auteur Raynos
Vous voyez "fonction () { return this.toObject(); }" parce que la méthode toJSON est un prototype de fonction.
Qui est de la console.journal(c'.chose.la méthode toJSON) affichera la fonction elle-même, mais de la console.journal(c'.chose.la méthode toJSON()) affichera la valeur retournée par la fonction. Ajouter le supplément de crochets sera exécuter la fonction.
Essayer de la console.journal(c'.chose.la méthode toJSON()) et voir si vous obtenez ce que vous cherchez.
OriginalL'auteur Greg Pike