前一篇文章讲了怎么创建 GraphQL 的查询操作,今天在此基础上看看要实现一个简单的分页查询应该怎么做,顺便可以介绍一下 GraphQL 里的枚举类型和查询参数应该怎么用。
创建 Node.js 的工程
mkdir myapp
cd myapp
npm init (一路回车)
安装依赖包
npm install @apollo/server graphql
定义 Schema
创建 schema.graphql 文件,内容如下:
type User {
id: ID!
name: String!
email: String!
}
enum SortBy {
name
email
}
enum SortDirection {
ASC
DESC
}
type Query {
users(
sortBy: SortBy = name
sort: SortDirection = ASC
offset: Int = 0
limit: Int = 10
): [User]
}
schema 文件主要包括:
- 定义类型:定义了一个User类型,包括 id, name 和 email 属性;定义了两个枚举类型,分别表示排序字段和排序类型。
- 定义查询操作:定义了一个列表查询操作,支持按指定字段和类型排序,并支持分页查询。
实现处理器
创建 resolvers.js 文件,内容如下:
const users = [];
for (let i = 0; i < 100; i++) {
users.push({id: i, name: 'user_' + i, email: 'user' + i + '@gmail.com'});
}
const resolvers = {
Query: {
users(obj, args, context, info) {
let result = users.sort((a, b) => {
const valueA = a[args.sortBy];
const valueB = b[args.sortBy];
if (valueA < valueB) {
return -1;
}
if (valueA > valueB) {
return 1;
}
return 0;
});
if (args.sort == "DESC") {
result = result.reverse();
}
result = result.slice(args.offset, args.offset + args.limit);
return result;
},
},
};
module.exports = resolvers;
处理器文件主要包括
- 准备测试数据:这里创建了一个 User 对象的数据组并初始化了几条数据。
- 定义处理函数:users(obj, args, context, info),其中 args 里包含了所有传递过来的参数。
主程序
创建 server.js 文件,内容如下:
const { ApolloServer } = require('@apollo/server');
const { startStandaloneServer } = require('@apollo/server/standalone');
const fs = require("fs");
const typeDefs = fs.readFileSync('./schema.graphql').toString();
const resolvers = require('./resolvers');
const server = new ApolloServer({
typeDefs,
resolvers,
});
startStandaloneServer(server).then(function(data) {
console.log(`
标签:const,入门,args,id,分页,GraphQL,users,email,name
From: https://blog.csdn.net/kongxx/article/details/136828834