Возвращающиеся мангусты находят результаты с двумя разными заказами - PullRequest
0 голосов
/ 31 января 2019

Я больше начинающий.У меня есть шаблон заголовка 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} в функцию.и вообще, я чувствую, что 2-й код не лучшая практика, я хотел бы получить общую справку о том, как сократить его и сделать его более похожим на профи.

функция:

// Получить все блоги из БД

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 (отправить данные блога, отослать все блоги обратно в нисходящих представлениях + по убыванию createAt):

// ПОКАЗАТЬ - показать дополнительную информациюоб одном блоге

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' });
        }
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...