- 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"
}
}
}