我使用的是nodejs + express + mongodb。我正在研究api。我想在nodejs + express中进行分页。 注意:有mongoose-pagination选项,但我没有使用猫鼬。我只使用直接mongodb。
请告诉我如何在nodejs + express中进行分页。我收到了这个链接express-paginate
但我无法解决这个问题。我不知道如何在我的API中实现它。
这是JSON数据。在这个步骤列出超过10的数组,所以我想为此做分页。
这是我的API。这里是循环的步骤,我添加了给定(在上面的github链接中)分页代码
const get = (req, res, next) => {
applogger.verbose(`retrieving asdsa with id ${req.params.asd}`);
asd.findOneById(req.params.asd)
.then(function(resp) {
for (var i = 0; i < resp.steps.length; i++) {
if (resp.asd[i].image == null) {
resp.asd[i].image = imgurl;
}
asd.paginate({}, { page: req.query.page, limit: req.query.limit }, function(err, users) {
if (err) return next(err);
res.format({
json: function() {
res.json('users', {
users: users.docs,
pageCount: users.pages,
itemCount: users.limit,
pages: paginate.getArrayPages(req)(3, users.pages, req.query.page)
});
},
json: function() {
// inspired by Stripe's API response for list objects
res.json({
object: 'list',
has_more: paginate.hasNextPages(req)(users.pages),
data: users.docs
});
}
});
});
}
if (resp.asd == null) {
resp.asd = imgurl;
}
res.json(resp);
}, function(err) {
res.send(err);
});
};
答案 0 :(得分:6)
使用您的mongo聚合/查找等...并且只应用跳过和限制运算符。
如果你想逐页显示X结果,如果你是页码N(从0开始)
MyCollection.find([
...
])
.skip(X * N)
.limit(X)
.exec(function(err, result){
///
Tourtle.find({})
.skip(req.skip)
.limit(req.query.limit)
.exec(function(err, users) {
if(err) .... else .....
});
答案 1 :(得分:3)
在您的客户端,您需要进行以下分页:
<ul class="pagination">
<li><a href="/yourRoute/1">1</a></li>
<li><a href="/yourRoute/2">2</a></li>
</ul>
你的后端就像:
const getTourtle = (req, res, next) => {
var page = req.params.id;
var minPage = 10 * (page - 1);
var maxPage = minPage + 10;
db.collection.find({
//do your query
}).min({_id:min_page}).max({_id:max_page});
res.json(resp); // send response to client
}