【发布时间】:2017-10-13 17:51:46
【问题描述】:
编辑:我意识到这挂在“res.json(comment);”行我的角度用户界面路线。仍然不知道为什么。
我正在阅读这里的教程:https://thinkster.io/tutorials/mean-stack。这可能与教程有点过时有关。我已将当前状态下的代码上传到http://github.com/orieporter/flappernews
这是一个简单的 reddit 克隆 Web 应用程序,用于发布链接、cmets 并对其进行投票。每次向帖子添加第一条评论时,我都会收到“RangeError:超出最大调用堆栈大小”错误。随后的 cmets 工作没有问题。当我重新启动节点服务器并重新加载页面时,破坏服务器的评论就在那里。谁能帮我在这里找到问题?
完全错误:
events.js:160
throw er; // Unhandled 'error' event
RangeError: Maximum call stack size exceeded
at model.Document.$toObject (c:\Users\source\repos\flapper-news\node_modules\mongoose\lib\document.js:1962:24)
at model.Document.toJSON (c:\Users\source\repos\flapper-news\node_modules\mongoose\lib\document.js:2300:15)
at clone (c:\Users\source\repos\flapper-news\node_modules\mongoose\lib\utils.js:252:18)
at cloneArray (c:\Users\source\repos\flapper-news\node_modules\mongoose\lib\utils.js:362:14)
at clone (c:\Users\source\repos\flapper-news\node_modules\mongoose\lib\utils.js:247:12)
at cloneObject (c:\Users\source\repos\flapper-news\node_modules\mongoose\lib\utils.js:343:13)
at clone (c:\Users\source\repos\flapper-news\node_modules\mongoose\lib\utils.js:260:16)
at model.Document.$toObject (c:\Users\source\repos\flapper-news\node_modules\mongoose\lib\document.js:2009:13)
at model.Document.toJSON (c:\Users\source\repos\flapper-news\node_modules\mongoose\lib\document.js:2300:15)
at clone (c:\Users\source\repos\flapper-news\node_modules\mongoose\lib\utils.js:252:18)
at cloneObject (c:\Users\source\repos\flapper-news\node_modules\mongoose\lib\utils.js:343:13)
at clone (c:\Users\source\repos\flapper-news\node_modules\mongoose\lib\utils.js:260:16)
at model.Document.$toObject (c:\Users\source\repos\flapper-news\node_modules\mongoose\lib\document.js:2009:13)
at model.Document.toJSON (c:\Users\source\repos\flapper-news\node_modules\mongoose\lib\document.js:2300:15)
at clone (c:\Users\source\repos\flapper-news\node_modules\mongoose\lib\utils.js:252:18)
at cloneArray (c:\Users\source\repos\flapper-news\node_modules\mongoose\lib\utils.js:362:14)
at clone (c:\Users\source\repos\flapper-news\node_modules\mongoose\lib\utils.js:247:12)
相关 HTML:
<form ng-submit="addComment()" style="margin-top:30px;">
<h3>Add a new comment</h3>
<div class="form-group">
<input type="text" class="form-control" placeholder="Comment" ng-model="body"></input>
</div>
<button type="submit" class="btn btn-primary">Post</button>
</form>
角度控制器功能:
$scope.addComment = function () {
if ($scope.body === '') { return; }
posts.addComment(post._id, {
body: $scope.body,
author: 'user'
},
$scope.post);
$scope.body = '';
};
Angular 工厂函数:
o.addComment = function (id, comment, post) {
return $http.post('/posts/' + id + '/comments', comment).then(function (response) {
post.comments.push(response.data);
return response.data;
});
};
相关特快路线:
router.post('/posts/:post/comments', function (req, res, next) {
var comment = new Comment(req.body);
comment.post = req.post;
comment.save(function (err, comment) {
if (err) { return next(err); }
req.post.comments.push(comment);
req.post.save(function (err, post) {
if (err) { return next(err); }
res.json(comment);
});
});
});
评论架构:
var CommentSchema = new mongoose.Schema({
body: String,
author: String,
upvotes: {type: Number, default: 0},
post: {type: mongoose.Schema.Types.ObjectId, ref: 'Post' }
});
发布架构:
var PostSchema = new mongoose.Schema({
title: String,
link: String,
upvotes: {type: Number, default: 0},
comments: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }]
});
【问题讨论】:
-
评论没有保存在这里:
comment.post = req.post;bc 你的请求没有post属性。它试图以err的形式回复,但您还没有回复,只是返回了函数。或者您是否有其他路由正在接收next(err)呼叫? -
我从路由文件另一部分的参数中获取帖子。我可以打印 req.post 到控制台没问题,它看起来不错。一旦我将comment.post 设置为req.post,我就无法将我的评论打印到控制台。同样,所有这些仅适用于我在帖子上发表的第一条评论。
标签: javascript angularjs node.js mongodb