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();
}
}
另外你应该先使用跳过然后添加限制。
我正在尝试使用 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();
}
}
另外你应该先使用跳过然后添加限制。