请使用mongoose+koa2实现分页查询
时间: 2023-10-19 13:05:20 浏览: 176
好的,以下是使用mongoose+koa2实现分页查询的示例代码:
```
const Koa = require('koa');
const Router = require('koa-router');
const mongoose = require('mongoose');
// 连接 MongoDB 数据库
mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true });
// 创建 Schema
const userSchema = new mongoose.Schema({
name: String,
age: Number
});
// 创建 Model
const UserModel = mongoose.model('User', userSchema);
// 创建 Koa 应用和路由
const app = new Koa();
const router = new Router();
// 分页查询接口
router.get('/users', async (ctx, next) => {
const page = parseInt(ctx.query.page) || 1; // 当前页码,默认为1
const limit = parseInt(ctx.query.limit) || 10; // 每页显示的记录数,默认为10
const skip = (page - 1) * limit; // 跳过的记录数
const users = await UserModel.find().skip(skip).limit(limit); // 查询指定页数的记录
const total = await UserModel.countDocuments(); // 查询总记录数
const totalPages = Math.ceil(total / limit); // 计算总页数
ctx.body = {
page,
limit,
total,
totalPages,
data: users
};
});
// 启动应用
app.use(router.routes()).use(router.allowedMethods());
app.listen(3000, () => {
console.log('Server is running at http://localhost:3000');
});
```
在上面的示例中,我们创建了一个名为`users`的接口,通过`ctx.query.page`和`ctx.query.limit`来获取当前页码和每页显示的记录数。然后根据这些参数,使用`skip()`和`limit()`方法来查询指定页数的记录。最后,我们还查询了总记录数,并根据每页显示的记录数计算了总页数。最终返回的数据格式如下:
```
{
"page": 1,
"limit": 10,
"total": 100,
"totalPages": 10,
"data": [
{ "name": "张三", "age": 18 },
{ "name": "李四", "age": 20 },
// ...
]
}
```
希望这个示例能够帮助到你。
阅读全文