GraphQL 解析器
Resolver 是一组函数,可为 GraphQL 查询生成响应。简单来说,解析器充当 GraphQL 查询处理程序。
GraphQL架构中的每个解析器函数都接受四个位置参数,如下所示:
fieldName:(root, args, context, info) => { result }
解析器功能的示例如下所示
//resolver function with no parameters and returning string
greeting:() => {
return "hello from TutorialsPoint !!!"
}
//resolver function with no parameters and returning list
students:() => db.students.list()
//resolver function with arguments and returning object
studentById:(root,args,context,info) => {
return db.students.get(args.id);
}
以下是位置论证及其描述
序号 | 论点和描述 |
---|---|
1 |
根 包含从父字段上的解析程序返回的结果的对象。 |
2 |
ARGS 参数传递给查询中的字段的对象。 |
3 |
上下文 这是特定查询中所有解析器共享的对象。 |
4 |
信息 它包含有关查询执行状态的信息,包括字段名称,从根目录到字段的路径。 |
解析器结果格式
GraphQL中的解析器可以返回不同类型的值,如下所示
序号 | 参数和描述 |
---|---|
1 |
null或undefined 这表示无法找到该对象 |
2 |
排列 这仅在架构指示字段的结果应为列表时才有效 |
3 |
诺言 解析器通常执行异步操作,例如从数据库或后端API获取,因此它们可以返回promise |
4 |
标量或物体 解析器也可以返回其他值 |
插图
让我们创建一个简单的应用程序来理解解析器。这将创建用于通过服务器的id查询学生的模式。学生数据将存储在一个平面文件中,我们将使用一个名为notarealdb的节点模块伪造数据库并从平面文件中读取。
以下是创建简单应用程序的逐步过程
步骤1 - 下载并安装项目所需的依赖项
创建一个名为resolver-app的文件夹。将目录从终端更改为resolver-app。稍后,请按照“环境设置”一章中的步骤3到5进行操作。
第2步 - 创建架构
在项目文件夹resolver-app中添加schema.graphql文件并添加以下代码 -
type Query {
greeting:String
students:[Student]
studentById(id:ID!):Student
}
type Student {
id:ID!
firstName:String
lastName:String
password:String
collegeId:String
}
模式文件显示用户可以查询问候语,学生和studentById。要检索具有特定ID的学生,我们使用数据类型ID!它显示了一个不可为空的唯一标识符字段。的学生字段返回学生的阵列,并且问候返回一个简单的字符串值。
第3步 - 创建解析器
在项目文件夹中创建文件resolvers.js并添加以下代码 -
const db = require('./db')
const Query = {
//resolver function for greeting
greeting:() => {
return "hello from TutorialsPoint !!!"
},
//resolver function for students returns list
students:() => db.students.list(),
//resolver function for studentbyId
studentById:(root,args,context,info) => {
//args will contain parameter passed in query
return db.students.get(args.id);
}
}
module.exports = {Query}
这里,studentById有三个参数。正如本章所讨论的,studentId可以从args中检索出来; root将包含Query对象本身。要返回特定学生,我们需要在学生集合中使用id参数调用get方法。
这里的问候,学生,studentById是处理查询解析器。学生解析器功能从数据访问层返回学生列表。要访问模块外部的解析器函数,必须使用module.exports导出Query对象。
第4步 - 运行应用程序
创建server.js文件。请参阅环境设置章节中的步骤8。在终端中执行命令npm start。服务器将在9000端口上启动并运行。在这里,我们使用GraphiQL作为客户端来测试应用程序。
打开浏览器并输入url,http://localhost:9000/graphiql
。在编辑器中键入以下查询
{
studentById(id:"S1001") {
id
firstName
lastName
}
}
上述查询的输出如下所示
{
"data": {
"studentById": {
"id": "S1001",
"firstName": "Mohtashim",
"lastName": "Mohammad"
}
}
}
GraphQL 操作可以是读操作,也可以是写操作。GraphQL 查询用于在使用变异写入或发布值时读取或获取值。在任何一种情况下,操作都是一个简单的字符串,GraphQL 服务器可以使用特定格式的数据解析和响应。通常用 ...