我正在学习如何创建 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)
我希望这有助于解决您的问题。