node.js - 如何在 Express.Js 中创建分页?
问题描述
我正在创建一个 API,它也从 3rd 方 API 获取数据,它没有分页。我想为某些端点创建每页 10 个元素的分页,我尝试了一些指南,但未能创建分页。
我的代码如下:
const Policies = require("../services/policiesApi");
exports.policies_list = (async (req, res, next) => {
const policiesList = await Policies.getPolicies;
console.log(policiesCount);
res.send(await policiesList)
});
如您所见,我从另一个文件中的第 3 方 API 中提取数据,并将其导出到控制器,并在控制器中导出到路由。
路由文件
const express = require('express');
const router = express.Router();
const app = express();
// Controller modules
const policies_controller = require("../controllers/policiesController");
router.get('/policies', policies_controller.policies_list);
//Exporting routers
module.exports = router;
在路由和控制器内部还有其他端点,但它们不需要分页(例如,它们正在获取 id 的信息)。我尝试使用 express-paginate 和 paginate-info 但我无法使其工作。如果您能帮我解决这个问题,我将不胜感激。谢谢!
解决方案
您应该实现一个单独的分页函数,该函数接受输入数据并以分页形式返回。如果您想选择某些字段、填充和排序它们,此函数需要必要的参数。
results = {};
results.totalNumber = await model[0].countDocuments(find);
const startIndex = (page - 1) * limit;
const endIndex = page * limit;
if (startIndex > 0) {
results.previous = {
limit: limit,
page: page - 1,
};
}
if (endIndex < results.totalNumber) {
results.next = {
limit: limit,
page: page + 1,
};
}
try {
results.results = await model[0].find(find_obj).select(select_string)
.skip(startIndex).limit(limit).sort(sort_obj)
.populate(populate_obj).lean();
return results;
} catch (err) {
return new ErrorResponse('Error!', 500);
}
推荐阅读
- flutter - 如何使 Row() 小部件中的元素保持颤动?
- javascript - jQuery 验证成功消息在单击每个元素时显示,但是当我提交页面然后返回成功消息时消失了
- c++ - C++:2 个内存区域,1 个受保护,1 个不受保护。如果非保护区的B类直接调用保护区的A类,应该抛出错误
- sql - 选择每个人在其他表中有多少文档
- tomcat - Tomcat maxThreads 和 acceptCount 调优以实现 Fail-Fast
- java - KStream-KStream-Join 在连续执行时具有不同的结果
- typescript - Typescript 在闭包中看不到参数验证
- python - 使用 Selenium 从 DOM 中检索消息
- java - Java 识别从另一个方法抛出的错误
- c# - 错误:文件部分上传到使用 C# FTPwebRequest 的 linux FTP