- GraphQL 教程
- GraphQL - 首页
- GraphQL - 简介
- GraphQL - 环境搭建
- GraphQL - 架构
- GraphQL - 应用程序组件
- GraphQL - 示例
- GraphQL - 类型系统
- GraphQL - 模式
- GraphQL - 解析器
- GraphQL - 查询
- GraphQL - 变异
- GraphQL - 验证
- GraphQL - JQuery 集成
- GraphQL - React 集成
- GraphQL - Apollo 客户端
- GraphQL - 客户端身份验证
- GraphQL - 缓存
- GraphQL 有用资源
- GraphQL - 快速指南
- GraphQL - 有用资源
- GraphQL - 讨论
GraphQL - 解析器
解析器是一组生成 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 | root 包含从父字段上的解析器返回的结果的对象。 |
| 2 | args 包含传递到查询中字段的参数的对象。 |
| 3 | context 这是特定查询中所有解析器共享的对象。 |
| 4 | info 它包含有关查询执行状态的信息,包括字段名称、从根到字段的路径。 |
解析器结果格式
GraphQL 中的解析器可以返回以下不同类型的值:
| 序号 | 参数和描述 |
|---|---|
| 1 | null 或 undefined 这表示找不到该对象 |
| 2 | 数组 仅当模式指示字段的结果应为列表时才有效 |
| 3 | promise 解析器通常执行异步操作,例如从数据库或后端 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
}
模式文件显示用户可以查询 greeting、students 和 studentById。要检索具有特定 id 的学生,我们使用 数据类型 ID!,它显示了一个不可为空的唯一标识符字段。students 字段返回一个学生数组,greeting 返回一个简单的字符串值。
步骤 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 参数在 students 集合中调用 get 方法。
这里 greeting、students、studentById 是处理查询的解析器。students 解析器函数从数据访问层返回学生列表。要从模块外部访问解析器函数,必须使用 module.exports 导出 Query 对象。
步骤 4 - 运行应用程序
创建一个 server.js 文件。参考“环境设置”章节中的步骤 8。在终端中执行命令 npm start。服务器将在 9000 端口启动并运行。在这里,我们使用 GraphiQL 作为客户端来测试应用程序。
打开浏览器并输入 url,https://:9000/graphiql。在编辑器中键入以下查询:
{
studentById(id:"S1001") {
id
firstName
lastName
}
}
上述查询的输出如下所示:
{
"data": {
"studentById": {
"id": "S1001",
"firstName": "Mohtashim",
"lastName": "Mohammad"
}
}
}