Mongoose: RangeError: se excedió el tamaño máximo de la pila de llamadas al actualizar los datos a la base de datos después de agregar jsonwebtoken en la URL

Creado en 7 mar. 2018  ·  3Comentarios  ·  Fuente: Automattic/mongoose

En mi aplicación (una aplicación de mensajería, cuando entro en el nuevo mensaje, en la entrada del mensaje (cadena) y hago clic en enviar, el servidor de nodo se cierra y me da el siguiente error
Aunque el nuevo mensaje que estoy enviando en el formulario de entrada se guarda en la base de datos. Y cuando reinicio el servidor de nodo, aparece.

/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

El contenido de mi ../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);

Este problema comenzó a suceder después de que inserté el código para jsonwebtoken en el archivo ./message/message.service.ts para agregar el token a mi 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()));
    }

El código fuente completo del proyecto - Base de código completa

Mencione su versión de node.js, mongoose y MongoDB.
nodo - v9.3.0
mongodb - versión v3.6.3
mangosta - 5.0.9

Comentario más útil

Hola @ rohan-paul,

gracias por facilitar la resolución de problemas. Cloné su repositorio y hay 2 líneas que deben cambiarse para que funcione:

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',

después de realizar estos cambios * pude agregar mensajes sin que se bloquee.
No tengo ninguna experiencia significativa con ts, y recibí un error en npm install sobre la compilación nativa de algunos de los paquetes ts, así que simplemente edité el js sin profundizar en ts. espero que esto ayude.

Todos 3 comentarios

Hola @ rohan-paul,

gracias por facilitar la resolución de problemas. Cloné su repositorio y hay 2 líneas que deben cambiarse para que funcione:

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',

después de realizar estos cambios * pude agregar mensajes sin que se bloquee.
No tengo ninguna experiencia significativa con ts, y recibí un error en npm install sobre la compilación nativa de algunos de los paquetes ts, así que simplemente edité el js sin profundizar en ts. espero que esto ayude.

mostrar dbs
administración 0.078GB
config 0.078GB
local 0.078GB
mongoose_test 0.203GB
nodo-angular 0.078GB
prueba 0.078GB
usar nodo-angular
cambiado a db node-angular
mostrar colecciones
mensajes
system.indexes
usuarios
db.users.find (). pretty ()
{
"_id": ObjectId ("5a9ff3800f2abba5379e8e93"),
"firstName": "flippy",
"lastName": "mcdoogal",
"contraseña": "$ 2a $ 10 $ J5H / BEKxik2SOt1b / vxWgOQIdNEERynejS7n6okj6JHTfhO / DySSG",
"correo electrónico": " [email protected] ",
"mensajes": [
ObjectId ("5a9ff4fe079501a615a5f6ff"),
ObjectId ("5a9ff5d654a45ba796525206")
],
"__v": 2
}

Hola @lineus - Eso funciona muy bien ... muchas gracias ...

¿Fue útil esta página
0 / 5 - 0 calificaciones