我更像是一个初学者。我有一个标头ejs模板,该模板具有一个侧面切换栏,该模板显示了几个视图次数最多的博客文章,以及两个最近(最新)的博客文章(node mongoose express,btw)。
我的代码可以正常工作,我只想知道是否有比此更好的解决方案。因为我必须在几乎每条路径中都包含(并修改!)整个代码,因为博客文章位于标头模板中(当然不仅限于此)。
router.get("/", function(req, res){
Blog.find({}, function(err, recentBlogs){
if(err){
console.log(err);
} else{
Blog.find({}, function(err, viewsBlogs){
if(err){
console.log(err);
} else{
res.render("index", {blogsR: recentBlogs, ... });
}
}).sort({ views: 'desc' });
}
}).sort({ createdAt: 'desc' });
});
我可以使上面的代码更短一点,还是使它变函数,但仍然可以包含更多内容,例如
{时刻:时刻}
函数中没有它?我可以成功地将页面(“索引”)传递给函数,但是不知道如何传递其他信息,尤其是在不知道我要呈现多少附加数据的情况下。话虽这么说,我不喜欢我的代码,出于教育原因问这个。谢谢您的帮助!
编辑: 这是3个代码示例。我可以将我的大多数路线中的第一个作为工作功能包括在内,这很不错。有一些特殊情况,例如,我不知道如何将{blog:foundBlog}传递给函数。总的来说,我觉得第二代码不是最佳实践,我想获得有关如何缩短它并使它更像专业人士的一般帮助。
功能:
//从数据库获取所有博客
function showBlogs(req, res, search, page){
Blog.find(search, function(err, recentBlogs){
if(err){
console.log(err);
} else{
Blog.find({}, function(err, viewsBlogs){
if(err){
console.log(err);
} else{
res.render(page, {moment: moment, blogsR: recentBlogs, blogsV: viewsBlogs, currentUser: req.user});
}
}).sort({ views: 'desc' });
}
}).sort({ createdAt: 'desc' });
}
特殊情况1(发送博客数据,以降序视图+降序createdAt发送所有博客):
// SHOW-显示有关一个Blog的更多信息
router.get("/:id", function(req, res){
//find the blog with provided ID
Blog.findById(req.params.id).populate("comments").exec(function(err, foundBlog){
if(err || !foundBlog){
req.flash("error", "Blog not found");
res.redirect("back");
} else {
Blog.findOneAndUpdate({ _id: req.params.id }, { $inc: { views: 1 } }, {new: true },function(err, response) {
if (err) {
console.log(err);
} else {
Blog.find({}, function(err, recentBlogs){
if(err){
console.log(err);
} else{
Blog.find({}, function(err, viewsBlogs){
if(err){
console.log(err);
} else{
res.render("blogs/show", {moment: moment, blogsR: recentBlogs, blogsV: viewsBlogs, currentUser: req.user, blog: foundBlog});
}
}).sort({ views: 'desc' });
}
}).sort({ createdAt: 'desc' });
}
});
}
});
});
特殊情况2(与上面的代码几乎相同,减去填充注释并更新视图计数):
//编辑博客路线
router.get("/:id/edit", middleware.isAdmin || middleware.checkBlogOwnership, function(req, res){
Blog.findById(req.params.id, function(err, foundBlog){
if(err){
req.flash("error", "Blog not found");
} else{
Blog.find({}, function(err, recentBlogs){
if(err){
console.log(err);
} else{
Blog.find({}, function(err, viewsBlogs){
if(err){
console.log(err);
} else{
res.render("blogs/edit", {moment: moment, blogsR: recentBlogs, blogsV: viewsBlogs, currentUser: req.user, blog: foundBlog});
}
}).sort({ views: 'desc' });
}
}).sort({ createdAt: 'desc' });
}
});
});