Mongoose: RangeError : taille maximale de la pile d'appels dépassée lors de la mise à jour des données dans la base de données après l'ajout de jsonwebtoken dans l'URL

Créé le 7 mars 2018  ·  3Commentaires  ·  Source: Automattic/mongoose

Dans mon application (une application de messagerie, lorsque j'entre dans le nouveau message, dans l'entrée du message (chaîne) et que je clique sur soumettre, le serveur de nœud se ferme en me donnant l'erreur ci-dessous
Bien que le nouveau message que je soumets dans le formulaire de saisie soit enregistré dans la base de données. Et lorsque je redémarre le serveur de nœuds, il apparaît.

/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongodb/lib/utils.js:132
      throw err;
      ^

RangeError: Maximum call stack size exceeded
    at model.Document.$toObject (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/document.js:2058:40)
    at model.Document.toJSON (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/document.js:2401:15)
    at clone (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/utils.js:164:18)
    at cloneObject (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/utils.js:246:11)
    at clone (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/utils.js:172:16)
    at model.Document.$toObject (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/document.js:2109:13)
    at model.Document.toJSON (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/document.js:2401:15)
    at clone (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/utils.js:164:18)
    at cloneArray (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/utils.js:260:14)
    at clone (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/utils.js:159:12)
    at cloneObject (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/utils.js:246:11)
    at clone (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/utils.js:172:16)
    at model.Document.$toObject (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/document.js:2109:13)
    at model.Document.toJSON (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/document.js:2401:15)
    at clone (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/utils.js:164:18)
    at cloneObject (/home/paul/codes/ng2/Seed-MEAN-Feb18-WIP/node_modules/mongoose/lib/utils.js:246:11)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] start: `node ./bin/www`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/paul/.npm/_logs/2018-03-07T12_32_54_826Z-debug.log

Le contenu de mon ../models/messages.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var User = require('./user');

var schema = new Schema({
    content: {type: String, required: true},
    user: {type: Schema.Types.ObjectId, ref: 'User'}
});

schema.post('remove', function (message) {
    User.findById(message.user, function (err, user) {
        user.messages.pull(message);
        user.save();
    });
});

module.exports = mongoose.model('Message', schema);

Ce problème a commencé à se produire après avoir inséré le code pour jsonwebtoken dans le fichier ./message/message.service.ts pour ajouter le jeton à mon post url

addMessage(message: Message) {
        const body = JSON.stringify(message);
        const headers = new Headers({'Content-Type': 'application/json'});
        const token = localStorage.getItem('token')
            ? '?token=' + localStorage.getItem('token')
            : '';
        return this.http.post('http://localhost:3000/message' + token, body, {headers: headers})
            .map((response: Response) => {
                const result = response.json();
                const message = new Message(
                    result.obj.content,
                    result.obj.user.firstName,
                    result.obj._id,
                    result.obj.user._id);
                this.messages.push(message);
                return message;
            })
            .catch((error: Response) => Observable.throw(error.json()));
    }

Le code source complet du projet - Base de code complète

Veuillez mentionner votre version node.js, mongoose et MongoDB.
nœud - v9.3.0
mongodb - version v3.6.3
mangouste - 5.0.9

Commentaire le plus utile

Salut @rohan-paul,

merci d'avoir rendu ce dépannage facile. J'ai cloné votre dépôt et il y a 2 lignes qui doivent être modifiées pour que cela fonctionne :

InspiredMacPro:rohan lineus$ git diff routes/messages.js 
diff --git a/routes/messages.js b/routes/messages.js
index 21996e0..5e3360d 100644
--- a/routes/messages.js
+++ b/routes/messages.js
@@ -45,7 +45,7 @@ router.post('/', function (req, res, next) {
         }
         var message = new Message({
             content: req.body.content,
-            user: user
+            user: user._id
         });
         message.save(function (err, result) {
             if (err) {
@@ -55,7 +55,7 @@ router.post('/', function (req, res, next) {
                 });
             }
             // Now because, I am connecting user with message, I have to save messages array in user model.
-            user.messages.push(result);
+            user.messages.push(result._id);
             user.save();
             res.status(201).json({
                 message: 'Saved message',

après avoir effectué ces modifications*, j'ai pu ajouter des messages sans que cela ne se bloque.
Je n'ai aucune expérience significative avec ts, et j'ai eu une erreur lors de l'installation de npm concernant la compilation native de certains des packages ts, alors j'ai juste modifié le js sans creuser dans ts. J'espère que cela t'aides.

Tous les 3 commentaires

Salut @rohan-paul,

merci d'avoir rendu ce dépannage facile. J'ai cloné votre dépôt et il y a 2 lignes qui doivent être modifiées pour que cela fonctionne :

InspiredMacPro:rohan lineus$ git diff routes/messages.js 
diff --git a/routes/messages.js b/routes/messages.js
index 21996e0..5e3360d 100644
--- a/routes/messages.js
+++ b/routes/messages.js
@@ -45,7 +45,7 @@ router.post('/', function (req, res, next) {
         }
         var message = new Message({
             content: req.body.content,
-            user: user
+            user: user._id
         });
         message.save(function (err, result) {
             if (err) {
@@ -55,7 +55,7 @@ router.post('/', function (req, res, next) {
                 });
             }
             // Now because, I am connecting user with message, I have to save messages array in user model.
-            user.messages.push(result);
+            user.messages.push(result._id);
             user.save();
             res.status(201).json({
                 message: 'Saved message',

après avoir effectué ces modifications*, j'ai pu ajouter des messages sans que cela ne se bloque.
Je n'ai aucune expérience significative avec ts, et j'ai eu une erreur lors de l'installation de npm concernant la compilation native de certains des packages ts, alors j'ai juste modifié le js sans creuser dans ts. J'espère que cela t'aides.

afficher la base de données
administrateur 0.078 Go
configuration 0,078 Go
0,078 Go local
mongoose_test 0.203GB
nœud-angulaire 0,078 Go
tester 0,078 Go
utiliser node-angular
passé à db node-angular
montrer les collections
messages
index.système
utilisateurs
db.users.find().pretty()
{
"_id" : ObjectId("5a9ff3800f2abba5379e8e93"),
"firstName" : "flippy",
"nom" : "mcdoogal",
"mot de passe" : "$2a$10$J5H/BEKxik2SOt1b/vxWgOQIdNEERynejS7n6okj6JHTfhO/DySSG",
"email" : " [email protected] ",
"messages" : [
ObjectId("5a9ff4fe079501a615a5f6ff"),
ID d'objet("5a9ff5d654a45ba796525206")
],
"__v" : 2
}

Salut @lineus - Cela fonctionne très bien.. merci beaucoup..

Cette page vous a été utile?
0 / 5 - 0 notes