【发布时间】:2020-08-26 08:02:42
【问题描述】:
我正在使用Express、EJS 和 MongoDB 开发 blogging application(单击链接查看 GitHub 存储库)。
我为帖子制作了一个简单的寻呼机。
在帖子中 controller 我有:
exports.getPosts = async (req, res, next) => {
const posts = await Post.find({}, (err, posts) => {
const perPage = 10;
const currPage = req.query.page ? parseInt(req.query.page) : 1;
const postsCount = posts.length;
const pageCount = Math.ceil(postsCount / perPage);
const pageDecrement = currPage > 1 ? 1 : 0;
const pageIncrement = currPage < pageCount ? 1 : 0;
if (err) {
console.log("Error: ", err);
} else {
res.render("default/index", {
moment: moment,
layout: "default/layout",
website_name: "MEAN Blog",
page_heading: "XPress News",
page_subheading: "A MEAN Stack Blogging Application",
currPage: currPage,
pageDecrement: pageDecrement,
pageIncrement: pageIncrement,
posts: posts,
});
}
})
.sort({ created_at: -1 })
.populate("category")
.limit(perPage)
.skip((currPage - 1) * perPage);
};
视图中的寻呼机:
<% if (posts) {%>
<div class="clearfix d-flex justify-content-center">
<div class="px-1">
<a class="btn btn-primary <%= pageDecrement == 0 ? 'disabled' : '' %>" href="/?page=<%= currPage - pageDecrement %>">← Newer Posts</a>
</div>
<div class="px-1">
<a class="btn btn-primary <%= pageIncrement == 0 ? 'disabled' : '' %>" href="/?page=<%= currPage + pageIncrement %>">Older Posts →</a>
</div>
</div>
<% } %>
问题
来自控制器的.limit(perPage) 行在控制台(Git bash)中给出了错误perPage is not defined。
不起作用的解决方案
很明显,我可以将这两行移到const posts上方
const perPage = 5;
const currPage = req.query.page ? parseInt(req.query.page) : 1;
但我可以不对const postsCount = posts.length;(我也需要在视图中)做同样的事情。
目标
我正在尝试使有关分页的代码的 sn-p 可重用(如果可能的话,就像一个插件),因为我需要为按类别过滤的帖子以及列表分页在应用程序的管理部分发布。
我做错了什么?
【问题讨论】:
-
我没有运行代码,但我认为
perPage变量是正确的范围。尝试在const posts之前定义它。 -
检查这些答案,他们可以帮助你Pagination Mongoose
标签: javascript node.js express ejs mean-stack