Mongoose: RangeError: Die maximale Größe des Aufrufstapels wurde beim Aktualisieren von Daten in die Datenbank nach dem Hinzufügen von jsonwebtoken in der URL überschritten

Erstellt am 7. März 2018  ·  3Kommentare  ·  Quelle: Automattic/mongoose

In meiner App (einer Messenger-App, wenn ich die neue Nachricht in die Nachricht (String) eingebe und auf Senden klicke, wird der Knotenserver geschlossen und mir der folgende Fehler angezeigt
Obwohl die neue Nachricht, die ich im Eingabeformular absende, in der Datenbank gespeichert wird. Und wenn ich den Node-Server neu starte, wird er angezeigt.

/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

Der Inhalt in meiner ../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);

Dieses Problem trat auf, nachdem ich den Code für jsonwebtoken in die Datei ./message/message.service.ts eingefügt hatte, um das Token zu meiner post URL hinzuzufügen

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()));
    }

Der vollständige Quellcode des Projekts - Vollständige Codebasis

Bitte erwähnen Sie Ihre node.js-, Mongoose- und MongoDB-Version.
Knoten - v9.3.0
mongodb - Version v3.6.3
Mungo - 5.0.9

Hilfreichster Kommentar

Hallo @rohan-paul,

danke für die einfache Fehlersuche. Ich habe Ihr Repo geklont und es gibt 2 Zeilen, die geändert werden müssen, damit es funktioniert:

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

Nach diesen Änderungen* konnte ich Nachrichten hinzufügen, ohne dass es abstürzte.
Ich habe keine nennenswerten Erfahrungen mit ts, und ich habe bei der npm-Installation einen Fehler bezüglich der nativen Kompilierung einiger der ts-Pakete erhalten, also habe ich nur die js bearbeitet, ohne in ts zu graben. hoffe das hilft.

Alle 3 Kommentare

Hallo @rohan-paul,

danke für die einfache Fehlersuche. Ich habe Ihr Repo geklont und es gibt 2 Zeilen, die geändert werden müssen, damit es funktioniert:

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

Nach diesen Änderungen* konnte ich Nachrichten hinzufügen, ohne dass es abstürzte.
Ich habe keine nennenswerten Erfahrungen mit ts, und ich habe bei der npm-Installation einen Fehler bezüglich der nativen Kompilierung einiger der ts-Pakete erhalten, also habe ich nur die js bearbeitet, ohne in ts zu graben. hoffe das hilft.

dbs anzeigen
Administrator 0.078GB
config 0.078GB
lokal 0,078 GB
mongoose_test 0.203GB
Knoten-Winkel 0.078GB
0,078 GB testen
Verwenden Sie Knoten-Winkel
auf db node-angular umgestellt
Kollektionen anzeigen
Mitteilungen
system.indizes
Benutzer
db.users.find().pretty()
{
"_id" : ObjectId("5a9ff3800f2abba5379e8e93"),
"vorname" : "flippy",
"nachname" : "mcdoogal",
"Passwort" : "$2a$10$J5H/BEKxik2SOt1b/vxWgOQIdNEERynejS7n6okj6JHTfhO/DySSG",
"E-Mail" : " [email protected] ",
"Mitteilungen" : [
ObjectId("5a9ff4fe079501a615a5f6ff"),
ObjectId("5a9ff5d654a45ba796525206")
],
"__v" : 2
}

Hi @lineus - Das funktioniert

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen