我想做一个博客,我想在一个html中显示文章和标签 这就是我的所作所为:
route.js:
router.get('/', auth.login_required, (req, res, next) => {
let ctx = {};
models.PostModel.find({}, (post) => {
┊ ctx.post = post;
});
models.TagsModel.find({}, (tags) => {
┊ ctx.tags = tags;
});
res.render('admin/dashboard', ctx);
});
但是这样,ctx
没有东西,它是{}
然后我试试这个:
router.get('/', auth.login_required, (req, res, next) => {
let ctx = {};
models.PostModel.find({}, (err, post) => {
┊ ctx.post = post;
┊ models.TagsModel.find({}, (err, tags) => {
┊ ┊ ctx.tags = tags; ┊ ┊ console.log(ctx);
┊ ┊ res.render('admin/dashboard', ctx);
┊ });
});
});
这可以工作,但我不想使用嵌套查询,我怎样才能优雅地编码呢?
答案 0 :(得分:0)
find
方法返回error
,渲染也能正常工作,你应该检查输出是否有错误。这样,只有在没有错误的情况下才能生成页面。
router.get('/', auth.login_required, (req, res, next) => {
let ctx = {};
models.PostModel.find({}, (err, post) => {
┊ ctx.post = post;
┊ if(err){
//there is an error.
console.log(err);
res.status(500).send('Something broke!')
}else{
//finding post completed
models.TagsModel.find({}, (err, tags) => {
if(err){
//finding tags gave an error.
console.log(err);
res.status(500).send('Something broke!')
}else{
//finding tags completed
ctx.tags = tags; ┊ ┊ console.log(ctx);
┊ ┊ res.render('admin/dashboard', ctx);
}
┊ ┊ });
}
});
});
答案 1 :(得分:0)
如果您的问题只是嵌套查询,那么您可以使用Promise链接查询并获得结果。您还可以使用嵌入式文档的概念来获取数据。
我们知道mongoDb没有任何连接概念,但这可以通过各种方式实现
1)Map-Reduce也会做你需要的,但你的查询可能会变得有点复杂。
2)$loopup允许将多个集合中的数据合并为一个。