【发布时间】:2018-06-26 22:06:13
【问题描述】:
我正在学习如何创建 MEAN 应用程序,当我尝试将消息推送到我的用户模型中的消息数组时遇到问题。 我可以创建一条新消息并传递用户对象,但是当尝试将消息对象传递到 user.messages 数组时,我在控制台中收到错误“RangeError:超出最大调用堆栈大小”。
我将发布我的用户和消息模型以及消息路由代码。
消息模型
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);
谢谢
【问题讨论】:
-
我认为您对用户和消息对象有循环依赖。您在消息对象内部调用 user.save() 并且 User 是消息对象的属性。我敢打赌问题来了,你能告诉我们 user.save() 方法吗?
-
.save() 是一种在数据库中持久化的 mongodb 方法。即使我只是推送到数组而不保存,我仍然会收到错误
标签: mongodb angular express mongoose