管道解析器 (JavaScript) - AWS AppSync

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

管道解析器 (JavaScript)

AWS AppSync在 GraphQL 欄位上執行解析程式。在某些情況下,應用程式需要執行多個操作,才能解析單一 GraphQL 欄位。使用管道解析器,開發人員現在可以撰寫稱為 Functions 的操作並按順序執行它們。在像是以需要先執行授權檢查才能擷取欄位資料的情況中,就很適合使用管道解析程式。

有關的體系結構的更多信息JavaScript管道解析器,請參閱JavaScript解析器概述

建立配管解析器

在AWS AppSync主控台,移至綱要頁面。

儲存下列結構描述:

schema { query: Query mutation: Mutation } type Mutation { signUp(input: Signup): User } type Query { getUser(id: ID!): User } input Signup { username: String! email: String! } type User { id: ID! username: String email: AWSEmail }

我們將一個管道解析器連接到注册欄位上突變類型。在突變在右側輸入,選擇貼附旁邊的signUp突變領域。將解析器設定為pipeline resolverAPPSYNC_JS執行階段,然後建立解析程式。

我們的管道解析程式會註冊使用者,此註冊的第一步是驗證電子郵件地址輸入,然後在系統中儲存此位使用者。我們將封裝在一個電子郵件驗證驗證電子郵件功能和內部用戶的保存儲存使用者功能。validateEmail 函數會先執行,而當電子郵件驗證有效時,saveUser 函數就會接著執行。

執行流程將如下所示:

  1. 突變. 註冊解析器請求處理程序

  2. validateEmail 函數

  3. saveUser 函數

  4. 突變. 註冊解析器響應處理程序

因為我們可能會重複使用驗證電子郵件在我們的 API 上的其他解析器中的功能,我們希望避免訪問ctx.args因為這些字段將從一個 GraphQL 字段更改為另一個字段。反之,我們可以使用 ctx.stash 來存放 signUp(input: Signup) 輸入欄位引數所傳遞的電子郵件屬性。

通過替換請求和響應函數來更新您的解析器代碼:

export function request(ctx) { ctx.stash.email = ctx.args.input.email return {}; } export function response(ctx) { return ctx.prev.result; }

選擇創建或者儲存以更新解析器。

建立函數

從配管解析器頁面的函数」區段中,按一下新增功能,然後建立新函數。也可以在不經過解析器頁面的情況下創建函數; 要做到這一點,在AWS AppSync主控台,移至函数頁面。選擇 Create function (建立函數) 按鈕。讓我們來建立可檢查電子郵件是否有效且來源是特定網域的函數。如果電子郵件無效,則該函數會引發錯誤。否則,它會轉送任何獲予的任何輸入。

請確定您已建立的資料來源沒有類型。選擇此資料來源資料來源名稱列表。對於函數名稱,請輸入validateEmail。在函數代碼區域,用這個代碼片段覆蓋所有內容:

import { util } from '@aws-appsync/utils'; export function request(ctx) { const { email } = ctx.stash; const valid = util.matches( '^[a-zA-Z0-9_.+-]+@(?:(?:[a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)?(myvaliddomain)\.com', email ); if (!valid) { util.error(`"${email}" is not a valid email.`); } return { payload: { email } }; } export function response(ctx) { return ctx.result; }

檢查您的輸入,然後選擇創建。我們已建立我們 validateEmail 函數。重複這些步驟來建立儲存使用者帶有下面的代碼的函數(為了簡單起見,我們使用沒有數據源並假裝用戶在函數執行後已保存在系統中。 ):

import { util } from '@aws-appsync/utils'; export function request(ctx) { return ctx.prev.result; } export function response(ctx) { ctx.result.id = util.autoId(); return ctx.result; }

我們剛剛創建了儲存使用者功能。

將函數添加到管線解析器

我們的函數應該已經自動添加到我們剛剛創建的管道解析器中。如果不是這種情況,或者您通過函数頁面上,您可以點擊新增功能回到signUp解析器頁面附加它們。添加兩個驗證電子郵件儲存使用者解析器的函數。validateEmail 函數應該放在 saveUser 函數之前。當您新增更多函數時,您可以使用向上移動向下移動用於重新組織函數執行順序的選項。檢視您的變更,然後選擇儲存

執行查詢

在AWS AppSync主控台,移至查詢頁面。在資源管理器中,確保您正在使用突變。如果您不是,請選擇Mutation在下拉列表中,然後選擇+。輸入下列查詢:

mutation { signUp(input: {email: "nadia@myvaliddomain.com", username: "nadia"}) { id username } }

這應該返回如下內容:

{ "data": { "signUp": { "id": "256b6cc2-4694-46f4-a55e-8cb14cc5d7fc", "username": "nadia" } } }

我們已使用管道解析程式成功註冊我們的使用者,並完成輸入電子郵件的驗證。