- GraphQL Tutorial
- GraphQL - Home
- GraphQL - Introduction
- GraphQL - Environment Setup
- GraphQL - Architecture
- GraphQL - Application Components
- GraphQL - Example
- GraphQL - Type System
- GraphQL - Schema
- GraphQL - Resolver
- GraphQL - Query
- GraphQL - Mutation
- GraphQL - Validation
- GraphQL - JQuery Integration
- GraphQL - React Integration
- GraphQL - Apollo Client
- GraphQL - Authenticating Client
- GraphQL - Caching
- GraphQL Useful Resources
- GraphQL - Quick Guide
- GraphQL - Useful Resources
- GraphQL - Discussion
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 | 参数 一个对象,其参数传递到查询中的字段中。 |
3 | 语境 这是特定查询中所有解析器共享的对象。 |
4 | 信息 它包含有关查询执行状态的信息,包括字段名称、从根到字段的路径。 |
解析器结果格式
GraphQL 中的解析器可以返回不同类型的值,如下所示 -
先生。 | 参数和描述 |
---|---|
1 | 空或未定义 这表明无法找到该对象 |
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 }
架构文件显示用户可以查询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 将包含查询对象本身。要返回特定的学生,我们需要使用学生集合中的 id 参数调用 get 方法。
这里的greeting、students、studentById是处理查询的解析器。学生解析器函数从数据访问层返回学生列表。要访问模块外部的解析器函数,必须使用 module.exports 导出 Query 对象。
第 4 步 - 运行应用程序
创建一个 server.js 文件。请参阅环境设置一章中的步骤 8。在终端中执行命令 npm start。服务器将在 9000 端口上启动并运行。在这里,我们使用 GraphiQL 作为客户端来测试应用程序。
打开浏览器并输入网址http://localhost:9000/graphiql。在编辑器中输入以下查询 -
{ studentById(id:"S1001") { id firstName lastName } }
上述查询的输出如下所示 -
{ "data": { "studentById": { "id": "S1001", "firstName": "Mohtashim", "lastName": "Mohammad" } } }