node.js - 如何在graphql中实现分页,它返回分页元数据和数据集
问题描述
目前我使用graphql默认分页,即使用限制偏移(下面给出的代码)。这工作正常。但是我们如何包含分页元数据而不是团队列表。并连同此一起返回分页元数据。我使用 sequalize 来获取数据
type Query {
allTeams(page:Int, pageSize:Int): [Team]
}
type Team {
id: Int
name: String
}
//resolver with pagination
const paginate = ( page, pageSize ) => {
var offset = page * pageSize;
var limit = pageSize;
return {
offset,
limit,
};
};
export const resolvers = {
Query: {
allTeams: async (obj, args, context, info ) => Teams.findAll(
paginate( args.page, args.pageSize ),
),
},
}
上面的代码只会返回团队列表。有什么办法可以返回包含团队列表和分页详细信息的输出
{
"data": {
"allTeams": [
{
"id": 4,
"name": "Team created from postman",
},
{
"id": 5,
"name": "Team created from postman",
}
]
},
"pageInfo": {
"currentPage": 2,
"perPage": 2,
"itemCount": 4,
"pageCount": 2,
"hasPreviousPage": true,
"hasNextPage": false
}
}
解决方案
是的,您只需将分页元数据添加到您的架构并在解析器中提供数据。因此,对于您要实现的输出,架构如下所示:
type Query {
teams(page:Int, pageSize:Int): TeamsConnection
}
type TeamsConnection {
results: [Team]
pageInfo: PageInfo
}
type Team {
id: Int
name: String
}
type PageInfo {
currentPage: Int
perPage: Int
itemCount: Int
pageCount: Int
hasPreviousPage: Boolean
hasNextPage: Boolean
}
然后,您的解析器将需要返回响应数据的新形状。所以像:
export const resolvers = {
Query: {
allTeams: async (obj, args, context, info ) => {
const results = awaitTeams.findAll(
paginate(args.page, args.pageSize),
);
return {
results,
pageInfo: {...}
}
}
}
}
推荐阅读
- sap - 如何安全地使用 S/4HANA 中的 API?
- tensorflow - ValueError:发现样本数量不一致的输入变量:[84, 5]
- assembly - 尝试用循环绘制垂直形状
- php - 在 PHP 表单中,字符串输入在提交后被转换为 0
- python - numpy 作者如何决定是否将函数放入 numpy.* 与 numpy.ndarray.* 中?
- go - 如何在 Visual Studio 代码中允许“供应商”文件夹支持
- html - Css Position:sticky 仅在 MOBILE 中不起作用
- python - 如何从 .gitlab-ci.yml 文件中提取单个管道名称?
- php - 如果脚本被注入到私有页面中,XSS 错误仍然很危险吗?
- python - Pandas 列的字典并选择正确的值