GraphQL教程

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);
}
下面给出了位置参数及其描述-
Sr.No. 参数和描述
1
root
包含从父字段上的解析器返回的结果的对象。
2
args
带有传递到查询字段中的参数的对象。
3
context
这是一个特定查询中所有解析器共享的对象。
4
info
它包含有关查询执行状态的信息,包括字段名称、从根到字段的路径。

解析器结果格式

GraphQL 中的解析器可以返回不同类型的值,如下所示-
Sr.No. 参数和描述
1
null 或 undefined
这表示找不到对象
2
array
这仅在架构指示字段的结果应为列表时有效
3
promise
解析器通常会执行异步操作,例如从数据库或后端 API 中获取数据,因此它们可以返回承诺
4
scalar or object
解析器也可以返回其他值

插图

让我们创建一个简单的应用程序来理解解析器。这将创建用于从服务器通过 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、studentstudentById。为了检索具有特定 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 参数的 get 方法。
这里 greeting, students, studentById 是处理查询的解析器。 students resolver function 从数据访问层返回学生列表。要访问模块外的解析器函数,必须使用 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"
      }
   }
}
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4