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

Posted

技术标签:

【中文标题】Mongoose 分页无法正常工作。当我刷新页面两次时它可以工作【英文标题】:Mongoose Pagination is not working properly. It works when I refresh the page twice 【发布时间】:2018-08-09 19:23:53 【问题描述】:

我正在使用猫鼬分页 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"); );

【问题讨论】:

您确定 app.get('*') 每次刷新都会受到打击吗?在那里放一个console.log。 是的。每秒刷新一次。有什么想法吗? 需要更多代码才能查看到底是什么问题。 @thomann061 你需要什么代码?如果你愿意,你可以看看github.com/Alisher778/vector-node repo 我认为这是因为 express-params 包。 router.param('page', /[0-9]/g) 【参考方案1】:

其实不是那个分页功能。就是上面这个正则表达式:

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

去掉'g'就可以了。

解释:

您正在使用 g(全局)正则表达式。在 javascript 中,全局正则表达式具有状态:您第一次调用它们(使用 exec、test 等),您将获得给定字符串中的第一个匹配项。再次调用它们,您将获得下一个匹配项,依此类推,直到您没有匹配项并重置为下一个字符串的开头。

Source

顺便说一句,您的正则表达式仅检查 0-9 之间的数字,如果您期望超过 10 篇博文,您可能希望它包含高于 9 的数字。

【讨论】:

是的,你是对的。我只是想使用数字。谢谢你的解释【参考方案2】:

你可以使用 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)
        );
);

【讨论】:

我也试过这个方法。但没有运气。这很有趣。为什么它第一次加载正确,第二次加载 404 页面时发生 所以如果第二个请求来页面值是404page? 是的。我的意思是如果它是 '/blog/pages/2' 并且如果我用相同的 url 刷新页面,它会说找不到页面 你能不能在 app.all('*') 里面 console.log 看看 req.url 是什么?

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

Mongoose 过期属性无法正常工作

无法在页面刷新时读取未定义反应路由器的属性

除非刷新页面,否则 Jquery Mobile Web 应用程序无法正常工作

Angular 7:分页无法正常工作

数据表过滤器在应用SQL Server 2008分页代码时无法正常工作

向导控件中的 Gridview 自定义分页在 asp.net 中无法正常工作