編集:これは "res.json(comment);"という行にぶら下がっている私の角度uiルートの。まだわからない平均スタック:最初のオブジェクトがMongoDBスキーマの配列にプッシュされるとRangeErrorが発生する
ここでは、チュートリアルの次の通りです:https://thinkster.io/tutorials/mean-stack。これはチュートリアルが少し古くなっているという事実に関連しているかもしれません。現在の状態で自分のコードをアップロードしましたhttp://github.com/orieporter/flappernews
これは、リンク、コメント、およびアップポストを投稿するためのシンプルなredditクローンウェブアプリです。投稿に最初のコメントを追加するたびに、「RangeError:最大呼び出しスタックサイズを超えました」というエラーが表示されます。それ以降のコメントは問題ありません。ノードサーバーを再起動してページをリロードすると、サーバーを壊したコメントが表示されます。誰も私がここで問題を見つけるのを助けることができますか?
全エラー:
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 = '';
};
角度ファクトリ関数:
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'属性がありません。それは 'エラー 'として返答しようとしていますが、あなたはそこに返答していません、ただ関数を返しました。あるいは 'next(err)'コールを受け取っている別のルートがありますか? – bazzells
ルートファイルの別の部分のパラメータから投稿を取得します。私はreq.postを問題なくコンソールに印刷でき、うまく見えます。 comment.postをreq.postに設定すると、自分のコメントをコンソールに表示できなくなります。そして、このすべては、私が投稿に行った最初のコメントにのみ適用されます。 – orieporter