Mongoose: RangeError: تم تجاوز الحد الأقصى لحجم مكدس الاستدعاءات أثناء تحديث البيانات إلى قاعدة البيانات بعد إضافة jsonwebtoken في عنوان url

تم إنشاؤها على ٧ مارس ٢٠١٨  ·  3تعليقات  ·  مصدر: Automattic/mongoose

في تطبيقي (تطبيق messenger ، عندما أقوم بإدخال الرسالة الجديدة ، في إدخال الرسالة (سلسلة) ، والنقر فوق إرسال ، يتم إغلاق خادم العقدة لإعطائي الخطأ أدناه
على الرغم من أن الرسالة الجديدة التي أرسلها في نموذج الإدخال يتم حفظها في قاعدة البيانات. وعندما أقوم بإعادة تشغيل خادم العقدة ، فإنه يظهر.

/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

المحتوى الموجود في ../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);

بدأت هذه المشكلة في الحدوث بعد أن أدخلت رمز jsonwebtoken في ملف ./message/message.service.ts لإضافة الرمز المميز إلى عنوان url الخاص بي post

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

كود المصدر الكامل للمشروع - قاعدة التعليمات البرمجية الكاملة

يرجى ذكر إصدار node.js و mongoose و MongoDB.
العقدة - v9.3.0
mongodb - الإصدار v3.6.3
النمس - 5.0.9

التعليق الأكثر فائدة

مرحبًا @ rohan-paul ،

شكرا لجعل هذا سهل لاطلاق النار. لقد قمت باستنساخ الريبو الخاص بك وهناك سطرين يجب تغييرهما لجعله يعمل:

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

بعد إجراء هذه التغييرات * تمكنت من إضافة الرسائل دون تعطلها.
ليس لدي أي خبرة مفيدة مع ts ، وقد تلقيت خطأ في تثبيت npm حول التجميع الأصلي لبعض حزم ts ، لذلك قمت للتو بتحرير js دون البحث في ts. أتمنى أن يساعدك هذا.

ال 3 كومينتر

مرحبًا @ rohan-paul ،

شكرا لجعل هذا سهل لاطلاق النار. لقد قمت باستنساخ الريبو الخاص بك وهناك سطرين يجب تغييرهما لجعله يعمل:

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

بعد إجراء هذه التغييرات * تمكنت من إضافة الرسائل دون تعطلها.
ليس لدي أي خبرة مفيدة مع ts ، وقد تلقيت خطأ في تثبيت npm حول التجميع الأصلي لبعض حزم ts ، لذلك قمت للتو بتحرير js دون البحث في ts. أتمنى أن يساعدك هذا.

عرض ديسيبل
admin 0.078 جيجابايت
التكوين 0.078 جيجابايت
0.078 جيجابايت محلي
mongoose_test 0.203 جيجابايت
الزاوي 0.078 جيجابايت
اختبار 0.078 جيجابايت
استخدام الزاوي العقدة
تحولت إلى ديسيبل عقدة الزاوية
عرض المجموعات
رسائل
الفهارس النظام
المستخدمين
db.users.find (). جميلة ()
{
"_id": ObjectId ("5a9ff3800f2abba5379e8e93") ،
"firstName": "flippy"،
"lastName": "mcdoogal"،
"كلمة المرور": "$ 2a $ 10 $ J5H / BEKxik2SOt1b / vxWgOQIdNEERynejS7n6okj6JHTfhO / DySSG" ،
"البريد الإلكتروني": " [email protected]
"رسائل" : [
ObjectId ("5a9ff4fe079501a615a5f6ff") ،
ObjectId ("5a9ff5d654a45ba796525206")
] ،
"__v": 2
}

مرحبًا lineus - هذا يعمل بشكل رائع .. شكرًا جزيلاً ..

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات