返回猫鼬以两个不同的顺序查找结果

时间:2019-01-31 09:40:07

标签: function sorting express mongoose

我更像是一个初学者。我有一个标头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' });
        }
    });
});

0 个答案:

没有答案