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.No | Arguments & Remark |
---|---|
1 | null or undefined 这表明找不到 对象 |
2 | array 这仅在模式指示字段的输出应为列表时有效 |
3 | promise 解析器通常会执行异步操作,如从数据库或后端API中获取信息 |
4 | scalar 或 Object 解析器还可以返回其他值 |
让无涯教程创建一个简单的应用程序来了解解析器,这将创建用于从服务器通过ID查询学生的模式,学生数据将存储在文件中,将使用名为 notarealdb 的节点模块来伪造数据库并从文件中读取。
以下是创建简单应用程序的分步过程-
创建一个名为 resolver-app 的文件夹。从终端将目录更改为 resolver-app 。稍后,请按照"环境设置"一章中的步骤3至5进行操作。
在项目文件夹resolver-app中添加schema.graphql文件,并添加以下代码-
链接:https://www.learnfk.comhttps://www.learnfk.com/graphql/graphql-resolver.html
来源:LearnFk无涯教程网
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 返回一个简单的字符串值。
在项目文件夹中创建文件 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方法。
要访问模块外部的解析器函数,必须使用module.exports导出查询对象 。
创建一个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" } } }
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)