管道解析器 (JavaScript) - Amazon AppSync
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

管道解析器 (JavaScript)

Amazon AppSync 对 GraphQL 字段执行解析器。在某些情况下,应用程序需要执行多个操作以解析单个 GraphQL 字段。通过使用管道解析器,开发人员现在可以编写称为“函数”的操作并按顺序执行它们。例如,管道解析器对于需要在获取字段数据之前执行授权检查的应用程序非常有用。

有关 JavaScript 管道解析器架构的更多信息,请参阅 JavaScript 解析器概述

创建管道解析器

在 Amazon 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 }

我们将一个管道解析器连接到 Mutation 类型的 signUp 字段。在右侧的 Mutation 类型中,选择 signUp 变更字段旁边的附加。将解析器设置为pipeline resolverAPPSYNC_JS 运行时环境,然后创建解析器。

我们的管道解析器通过先验证电子邮件地址输入,然后将用户保存在系统中来注册用户。我们将电子邮件验证封装在 validateEmail 函数中,并将用户保存在 saveUser 函数中。首先执行 validateEmail 函数,如果电子邮件有效,则执行 saveUser 函数。

执行流程如下所示:

  1. Mutation.signUp 解析器请求处理程序

  2. validateEmail 函数

  3. saveUser 函数

  4. Mutation.signUp 解析器响应处理程序

由于我们可能在 API 上的其他解析器中重复使用 validateEmail 函数,因此,我们希望避免访问 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; }

选择创建保存以更新解析器。

创建函数

从管道解析器页面的函数部分中,单击添加函数,然后单击创建新函数。也可以不通过解析器页面创建函数;为此,请在 Amazon AppSync 控制台中转到函数页面。选择创建函数按钮。让我们创建一个函数来检查电子邮件是否有效并来自特定域。如果电子邮件无效,该函数会引发一个错误。否则,它将转发接收到的任何输入。

确保您已创建一个 NONE 类型的数据源。在数据源名称列表中选择该数据源。对于函数名称,请输入 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 函数。重复这些步骤以创建具有以下代码的 saveUser 函数(为了简单起见,我们使用 NONE 数据源,并假设在函数执行后已将用户保存在系统中):

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

我们刚刚创建了 saveUser 函数。

将函数添加到管道解析器

我们的函数应该已自动添加到刚刚创建的管道解析器中。如果情况并非如此,或者您通过函数页面创建了函数,您可以再次单击 signUp 解析器页面上的添加函数以附加这些函数。将 validateEmailsaveUser 函数添加到解析器中。validateEmail 函数应放在 saveUser 函数之前。在添加更多函数时,您可以使用上移下移选项重新排列函数的执行顺序。检查您的更改,然后选择保存

运行查询

在 Amazon AppSync 控制台中,转到查询页面。在资源管理器中,确保您正在使用变更。如果不是,请在下拉列表中选择Mutation,然后选择 +。输入以下查询:

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

它应返回如下内容:

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

我们已成功注册用户,并使用管道解析器验证了输入电子邮件。