GraphQL - 解析器

GraphQL - 解析器 首页 / GraphQL入门教程 / GraphQL - 解析器

Resolver 是为 GraphQL 查询生成响应的函数集合。简单来说,解析器充当 GraphQL 查询处理程序。 GraphQL 模式中的每个解析器函数都接受四个位置参数,如下所示 -

fieldName:(root, args, context, info) => { result }

解析器函数的如下所示-

//没有参数和返回字符串的解析器函数
greeting:() => {
   return "hello from  LearnFk !!!"
}

//没有参数和返回列表的解析器函数
students:() => db.students.list()

//带参数和返回对象的解析器函数
studentById:(root,args,context,info) => {
   return db.students.get(args.id);
}

下面给出了位置参数及其描述-

Sr.No.Arguments & Remark
1

root

包含从解析器在父字段上返回的输出的对象 。

2

args

具有参数的 对象 传递到查询的字段中。

3

context

这是特定查询中所有解析程序共享的对象 。

4

info

它包含有关查询执行状态的信息,包括字段名称,从根到字段的路径。

解析器格式化

GraphQL中的解析器可以返回不同类型的值,如下所示-

Sr.NoArguments & Remark
1

null or undefined

这表明找不到 对象

2

array

这仅在模式指示字段的输出应为列表时有效

3

promise

解析器通常会执行异步操作,如从数据库或后端API中获取信息

4

scalar 或 Object

解析器还可以返回其他值

无涯教程网

让无涯教程创建一个简单的应用程序来了解解析器,这将创建用于从服务器通过ID查询学生的模式,学生数据将存储在文件中,将使用名为 notarealdb 的节点模块来伪造数据库并从文件中读取。

以下是创建简单应用程序的分步过程-

步骤1  -  下载并安装依赖项

创建一个名为 resolver-app 的文件夹。从终端将目录更改为 resolver-app 。稍后,请按照"环境设置"一章中的步骤3至5进行操作。

步骤2  -  创建Schema文件

在项目文件夹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
}

模式文件显示用户可以查询操作,students和 studentById ,要检索具有特定ID的学生,使用数据类型ID!,它显示了不可为空的唯一标识符字段。 students 字段返回一个学生数组,而 greeting 返回一个简单的字符串值。

步骤3  -  创建解析器

在项目文件夹中创建文件 resolvers.js 并添加以下代码-

const db=require('./db')
const Query={
   //greeting的解析器功能
   greeting:() => {
      return "hello from  LearnFk !!!"
   },
   
   //students返回列表的解析器函数
   students:() => db.students.list(),

   //studentbyId 的解析器函数
   studentById:(root,args,context,info) => {
      //args 将包含在查询中传递的参数
      return db.students.get(args.id);
   }
}
module.exports={Query}

在这里, studentById 接受三个参数。如本章所述,可以从args中检索 studentId 。要返回特定的学生,需要在学生集合中调用带有id参数的get方法。

链接:https://www.learnfk.comhttps://www.learnfk.com/graphql/graphql-resolver.html

来源:LearnFk无涯教程网

要访问模块外部的解析器函数,必须使用module.exports导出查询对象 。

步骤4  -  运行应用程序

创建一个server.js文件。请参阅环境设置一章中的步骤8。在终端中执行命令npm start。服务器将启动并在9000端口上运行。在这里,使用GraphiQL作为客户端来测试应用程序。

打开浏览器,然后输入URL http://localhost:9000/graphiql 。在编辑器中键入以下查询-

{  
   studentById(id:"S1001") {
      id
      firstName
      lastName
   }
}

以上查询的输出如下所示-

{
   "data": {
      "studentById": {
         "id": "S1001",
         "firstName": "Learnfk",
         "lastName": "Mohammad"
      }
   }
}

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

算法面试通关40讲 -〔覃超〕

Python核心技术与实战 -〔景霄〕

Java性能调优实战 -〔刘超〕

Swift核心技术与实战 -〔张杰〕

MongoDB高手课 -〔唐建法(TJ)〕

后端技术面试 38 讲 -〔李智慧〕

安全攻防技能30讲 -〔何为舟〕

eBPF核心技术与实战 -〔倪朋飞〕

快速上手C++数据结构与算法 -〔王健伟〕

好记忆不如烂笔头。留下您的足迹吧 :)