ita*_*ied 1 pagination node.js sequelize.js
用sequelize
我的nodejs
web应用程序,我想查询使用分页(按日期)的职位.阅读sequelize
文档,他们提供使用offset
和limit
.
由于我想显示从新到旧的帖子,我需要考虑它们的创建日期.例如,如果我将第一个查询限制为10个页面,并且在执行第二个查询之前创建了一个新帖子,则下一个偏移量为10的查询将导致上一个查询的重复发布.
我应该如何实现分页以便支持新条目?
aks*_*ade 10
与findAndCountAll
此数是分页有用的,从这个总数,因为我们希望,我们可以限制也与异步并等待
let resAccidents = await ModalName.findAndCountAll({ where: { createdByID: employeeID }, offset: 0, limit: 10 });
Run Code Online (Sandbox Code Playgroud)
这将根据 where 条件和第 10 条记录返回总记录数,然后增加 offset 的值以获取更多记录。
Bol*_*him 10
你可以简单地这样做
let limit = 10;
let offset = 0 + (req.body.page - 1) * limit;
Posts.findAndCountAll({
offset: offset,
limit: limit,
order: [["date", "ASC"]],
})
.then(async (result) => {
return res.status(200).json({
status: true,
message: res.__("success"),
innerData: result,
});
})
.catch((err) => {
return validator.InvalidResponse(res, `${err}`);
});
Run Code Online (Sandbox Code Playgroud)
如果你想要一个稳定的分页,不要对行偏移进行分页,因为它是不稳定的,因为你提到的原因.
您应该针对随时间稳定的值进行分页,并使用where子句来过滤结果.最好的情况是如果你有一个自动递增的id,但是发布日期也可能是合理的.
就像是:
Post.findAll({
where: { createdDate: { $lt: previousDate },
limit: 10
})
Run Code Online (Sandbox Code Playgroud)
您需要跟踪此ofc的previousDate.这种方法也有一些注意事项,您可能需要将其与客户端重复数据删除相结合.
这篇博文可能包含你需要的所有答案: 分页:你(可能)做错了
最简单的方法是使用Sequelize findAndCountAll
Post.findAndCountAll({
where: {...},
order: [...],
limit: 5,
offset: 0,
}).then(function (result) {
res.render(...);
});
Run Code Online (Sandbox Code Playgroud)
在这里,结果有查询的两个结果,算作result.row
和result.count
.然后,您可以增加偏移量并将其用于分页.
小智 7
尝试这个:
const paginate = (query, { page, pageSize }) => {
const offset = page * pageSize;
const limit = pageSize;
return {
...query,
offset,
limit,
};
};
model.findAll(
paginate(
{
where: {}, // conditions
},
{ page, pageSize },
),
);
Run Code Online (Sandbox Code Playgroud)
为了避免样板代码
归档时间: |
|
查看次数: |
13118 次 |
最近记录: |