主页 > 手机  > 

GraphQL入门之查询片段的使用

GraphQL入门之查询片段的使用

前面的文章介绍了 GraphQL 的查询操作,但是有时候我们要执行类似下面的这种查询操作,在一个查询中包含多个查询操作并且返回的对象结果相同的时候,重复去写这些属性列表也是比较冗余的事情,那么怎么简化这个写法呢?下面就看看怎么通过 fragment 来简化这个写法。

query ExampleQuery { allusers: users { id name email } firstuser: user(id: 1) { id name email } 。。。 } 创建 Node.js 的工程 mkdir myapp cd myapp npm init (一路回车) 安装依赖包 npm install @apollo/server graphql 定义 Schema

创建 schema.graphql 文件,内容如下:

type User { id: ID! name: String! email: String! } type Query { users: [User], user(id: ID!): User, }

schema 文件主要包括:

定义模型对象:定义了一个User对象,包括 id, name 和 email 属性。定义查询操作:定义了两个查询操作,users查询所有用户,user(id)根据id查询用户。 实现处理器

创建 resolvers.js 文件,内容如下:

const user1 = {id: 1, name: 'user1', email: 'user1@gmail '}; const user2 = {id: 2, name: 'user2', email: 'user2@gmail '}; const user3 = {id: 3, name: 'user3', email: 'user3@gmail '}; const users = [user1, user2, user3]; const resolvers = { Query: { users: () => users, user(obj, args, context, info) { for (let user of users) { if (user.id == args.id) { return user; } } return null; }, }, }; module.exports = resolvers;

处理器文件主要包括

准备测试数据:这里创建了一个 User 对象的数据组并初始化了几条数据。定义处理函数: users:返回上面初时的 User 数组。 user(obj, args, context, info):根据传入的 id 在 User 数组中查找,并返回查询结果。 主程序

创建 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(`🚀 Server ready at ${data.url}`); }); 测试 启动服务 node server.js

服务启动后,访问 http://localhost:4000 进行测试。

查询操作

查询操作

fragment userfields on User { id name email } query ExampleQuery { allusers: users { ... userfields } firstuser: user(id: 1) { ... userfields } }

这里定义了一个 fragment,包含了所有需要返回的 User 类型的属性

在所有需要写返回属性的地方,使用 “…” 操作符来引用上面定义的 fragment。

执行结果

{ "data": { "allusers": [ { "id": "1", "name": "user1", "email": "user1@gmail " }, { "id": "2", "name": "user2", "email": "user2@gmail " }, { "id": "3", "name": "user3", "email": "user3@gmail " } ], "firstuser": { "id": "1", "name": "user1", "email": "user1@gmail " } } }
标签:

GraphQL入门之查询片段的使用由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“GraphQL入门之查询片段的使用