Nodejs 分页的一个错误

A bug with Nodejs Pagination

我正在尝试使用 express 创建这个简单的 nodejs 分页,它适用于除第一页以外的所有页面。当我到达第 1 页时,它继续加载而没有任何结果,我知道问题出在哪里。甚至 youtube 教程都在编写完全相同的代码。感谢任何帮助

exports.paginatedResults = (model) => {
  return async (req, res, next) => {
    const page = parseInt(req.query.page)  || 1;
    const limit = req.query.limit * 1 || 100;
    const startIndex = (page - 1) * limit;
    const endIndex = page * limit;
    const results = {};
    if (endIndex < await model.countDocuments().exec()) {
      results.next = {
        page: page + 1,
        limit: limit,
      }
    }
    if (startIndex > 0) {
      results.previous = {
        page: page - 1,
        limit: limit,
      }
      results.results = await model.find().limit(limit).skip(startIndex).exec();
      res.paginatedResults = results;

      next();
    }
  }
}

您已经在 if 块中写入了 model.find,该块不会对第一页执行,因为在这种情况下 startIndex 将为 0。您还在 if 块中编写了 next() ,因此在第一页的情况下不会调用它,这就是页面处于加载状态的原因。

这样试试

exports.paginatedResults = (model) => {
  return async (req, res, next) => {
    const page = parseInt(req.query.page)  || 1;
    const limit = req.query.limit * 1 || 100;
    const startIndex = (page - 1) * limit;
    const endIndex = page * limit;
    const results = {};
    if (endIndex < await model.countDocuments().exec()) {
      results.next = {
        page: page + 1,
        limit: limit,
      }
    }
    if (startIndex > 0) {
      results.previous = {
        page: page - 1,
        limit: limit,
      }
     }
    results.results = await model.find().skip(startIndex).limit(limit).exec();
      res.paginatedResults = results;

      next();
  }
}

另外你应该先使用跳过然后添加限制。