Cursor Based Pagination指的是通过游标来定位数据并进行分页,这种方式相比传统的基于页码的分页更加灵活和可靠。API REST Tracket Cursor Based Pagination改写为“基于游标的分页API”。
以下是使用Node.js和MongoDB实现基于游标的分页API的示例代码:
const express = require('express');
const mongoose = require('mongoose');
const app = express();
const Item = mongoose.model('Item', { name: String });
app.get('/items', async (req, res) => {
const { limit = 10, after } = req.query;
const filter = after ? { _id: { $gt: after } } : {};
const items = await Item.find(filter).limit(limit);
const next = items.length === limit ?
`/items?limit=${limit}&after=${items[items.length - 1]._id}` :
null;
res.json({
items,
next
});
});
mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true });
app.listen(3000, () => console.log('Server started on port 3000'));
上面这个例子实现了一个GET /items的API,支持以下查询参数:
limit(每页返回的记录数,默认为10) after(游标,用于定位当前页的最后一条记录)
当不传递after参数时,返回第一页的记录。对于后续页,将after设置为上一页返回结果中的最后一条记录的_id即可。API返回的JSON中包含两个字段:
items:当前分页的记录数组 next:下一页的链接(如果有下一页)