猫鼬人口呼叫(也许?)挂
Mongoose population call (maybe?) hanging
我正在关注 thinkster.io MEAN tutorial - 一切正常,但我试图稍微偏离轨道,但我不明白为什么我的更改不起作用。在我的更改之后,GETting /posts/<id>
根本没有响应 - 节点记录请求,但没有发送响应。
工作代码
router.param('post', function(req, res, next, id) {
var query = Post.findById(id);
query.exec(function (err, post){
if (err) { return next(err); }
if (!post) { return next(new Error('can\'t find post')); }
req.post = post;
return next();
});
});
router.get('/posts/:post', function(req, res, next) {
req.post.populate('comments', function(err, post) {
if (err) { return next(err); }
res.json(post);
});
});
代码损坏
我所做的只是将填充调用移至参数处理程序(这是正确的术语吗?)- 在我看来,这应该可行 - 当 GET 处理程序出现时,req.post
应该填充它的评论,不是吗?
router.param('post', function(req, res, next, id) {
var query = Post.findById(id);
query.exec(function (err, post){
if (err) { return next(err); }
if (!post) { return next(new Error('can\'t find post')); }
post.populate('comments', function(err, spost) {
if (err) { return next(err); }
req.post = spost;
});
return next();
});
});
router.get('/posts/:post', function(req, res) {
res.json(req.post);
});
否,因为当您调用 return next() 时,post.populate 可能尚未完成。
最重要的是,您可能会调用 next 两次(如果填充因错误而失败)
query.exec(function (err, post){
if (err) { return next(err); }
if (!post) { return next(new Error('can\'t find post')); }
//return to ensure you can not call next two times
return post.populate('comments', function(err, spost) {
if (err) { return next(err); }
req.post = spost;
return next(); //then we are sure next is called only when post is attached to req
});
});
我正在关注 thinkster.io MEAN tutorial - 一切正常,但我试图稍微偏离轨道,但我不明白为什么我的更改不起作用。在我的更改之后,GETting /posts/<id>
根本没有响应 - 节点记录请求,但没有发送响应。
工作代码
router.param('post', function(req, res, next, id) {
var query = Post.findById(id);
query.exec(function (err, post){
if (err) { return next(err); }
if (!post) { return next(new Error('can\'t find post')); }
req.post = post;
return next();
});
});
router.get('/posts/:post', function(req, res, next) {
req.post.populate('comments', function(err, post) {
if (err) { return next(err); }
res.json(post);
});
});
代码损坏
我所做的只是将填充调用移至参数处理程序(这是正确的术语吗?)- 在我看来,这应该可行 - 当 GET 处理程序出现时,req.post
应该填充它的评论,不是吗?
router.param('post', function(req, res, next, id) {
var query = Post.findById(id);
query.exec(function (err, post){
if (err) { return next(err); }
if (!post) { return next(new Error('can\'t find post')); }
post.populate('comments', function(err, spost) {
if (err) { return next(err); }
req.post = spost;
});
return next();
});
});
router.get('/posts/:post', function(req, res) {
res.json(req.post);
});
否,因为当您调用 return next() 时,post.populate 可能尚未完成。 最重要的是,您可能会调用 next 两次(如果填充因错误而失败)
query.exec(function (err, post){
if (err) { return next(err); }
if (!post) { return next(new Error('can\'t find post')); }
//return to ensure you can not call next two times
return post.populate('comments', function(err, spost) {
if (err) { return next(err); }
req.post = spost;
return next(); //then we are sure next is called only when post is attached to req
});
});