首页 > 解决方案 > 如何在 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 但我无法使其工作。如果您能帮我解决这个问题,我将不胜感激。谢谢!

标签: node.jsapiexpresspagination

解决方案


您应该实现一个单独的分页函数,该函数接受输入数据并以分页形式返回。如果您想选择某些字段、填充和排序它们,此函数需要必要的参数。

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);
}

推荐阅读