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、studentsstudentById。要檢索具有特定 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"
      }
   }
}
廣告

© . All rights reserved.