Mongoose Pagination工作不正常。当我刷新页面两次时,它可以工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mongoose Pagination工作不正常。当我刷新页面两次时,它可以工作相关的知识,希望对你有一定的参考价值。

我正在使用mongoose pagination v5.0.3,节点9.3.0。我有这个代码用于我的博客分页:

 router.get('/pages/:page', function(req, res){
     var page = req.params.page > 0? req.params.page : 0;

     Blog.paginate({}, { page: page, limit: 2 })
       .then(function(data){
           res.render('blog/index', {blog: data.docs});
       }).catch(function(err){
           res.send(err)
     });
 });

当页面加载时,此代码可以正常工作,但是当我刷新页面时,它会加载“未找到页面”app.get("*", function(req, res) { res.render("pages/404page"); });

答案

它实际上不是分页功能。正是这个正则表达式声明如上:

router.param('page', /[0-9]/g)

删除'g'它会起作用。

说明:

您正在使用g(全局)RegExp。在javascript中,全局regexen有状态:你第一次调用它们(使用exec,test等),你得到给定字符串中的第一个匹配。再次调用它们,然后你得到下一个匹配,依此类推,直到你得不到匹配,并重置为下一个字符串的开头。

Source

顺便说一句,你的正则表达式只检查0-9之间的数字,如果你期望超过10个博客帖子,你可能希望这个数字高于9。

另一答案

你可以使用find skip和limit来做同样的事情。

router.get('/pages/:page', function (req, res) {
    var page = req.params.page > 0 ? req.params.page : 0;
    var limit = 2;
    Blog.find({})
        .limit(limit)
        .skip(limit * page)
        .exec()
        .then(function (data) {
            res.render('blog/index', {
                blog: data.docs
            });
        }).catch(function (err) {
            res.send(err)
        });
});

以上是关于Mongoose Pagination工作不正常。当我刷新页面两次时,它可以工作的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose 过期属性无法正常工作

MongoDB + Mongoose:独特:真正无法正常工作[重复]

antd pagination onchange 事件不触发,pagination onchange分页请求内容不正确。

antd pagination onchange 事件不触发,pagination onchange分页请求内容不正确。

antd pagination onchange 事件不触发,pagination onchange分页请求内容不正确。

Mongoose 分页无法正常工作。当我刷新页面两次时它可以工作