MongoDb NodeJs 范围错误:推送消息时超出了最大调用堆栈大小



我正在学习如何创建 MEAN 应用程序,当我尝试将消息推送到用户模型中的消息数组中时遇到问题。我可以创建新消息并传递用户对象,但是当尝试将消息对象传递到 user.messages 数组时,我在控制台中收到错误"范围错误:超出最大调用堆栈大小"。

我将发布我的用户和消息模型以及消息路由代码。

消息模型

let mongoose = require('mongoose');
let Schema = mongoose.Schema;
let User = require('./user');

let schema = new Schema({
    content: {
        type: String,
        required: true
    },
    user: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User'
    }
});
module.exports = mongoose.model('Message', schema);

用户模型

let mongoose = require('mongoose');
let Schema = mongoose.Schema;
let mongooseUniqueValidator = require('mongoose-unique-validator');
let schema = new Schema({
    firstName: {
        type: String,
        required: true
    },
    lastName: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    email: {
        type: String,
        required: true,
        unique: true
    },
    messages: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Message'
    }]
});
schema.plugin(mongooseUniqueValidator);
module.exports = mongoose.model('User', schema);

和我的路线代码

let express = require('express');
let router = express.Router();
let jwt = require('jsonwebtoken');
let User = require('../models/user');
let Message = require('../models/message');
router.get('/', function (req, res, next) {
    Message.find()
        .exec(function (err, messages) {
            if (err) {
                return res.status(500).json({
                    title: 'An error occurred',
                    error: err
                });
            }
            res.status(200).json({
                message: 'Success',
                obj: messages
            });
        });
});
// Protect Routes
router.use('/', (req, res, next) => {
    jwt.verify(req.query.token, 'secret', (err, decoded) => {
        if (err) {
            return res.status(401).json({
                title: 'Not Authenticated',
                error: err
            });
        }
        next();
    });
});
router.post('/', (req, res, next) => {
    let decoded = jwt.decode(req.query.token);
    User.findById(decoded.user._id, (err, user) => {
        if (err) {
            return res.status(500).json({
                title: 'An error occurred',
                error: err
            });
        }
        let message = new Message({
            content: req.body.content,
            user: user
        });
        message.save((err, result) => {
            if (err) {
                return res.status(500).json({
                    title: 'An error occurred',
                    error: err
                });
            }
            user.messages.push(result);
            user.save();
            res.status(201).json({
                message: 'Saved message',
                obj: result
            });
        });
    });
});

module.exports = router;

我相信问题出在邮政路线上

user.messages.push(result(;

谢谢

你在模式中使用 refs,所以你应该存储_id值而不是整个对象:

...
let message = new Message({
  content: req.body.content,
  user: user._id
})
...

。和:

user.messages.push(result._id)

我希望这有助于解决您的问题。

最新更新