在 JavaScript 中從 遷移VTL至 AWS AppSync - AWS AppSync

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

在 JavaScript 中從 遷移VTL至 AWS AppSync

AWS AppSync 可讓您使用 VTL或 為解析器和函數編寫業務邏輯 JavaScript。使用兩種語言時,您會撰寫邏輯,指示 AWS AppSync 服務如何與資料來源互動。使用 VTL時,您會撰寫必須評估為有效 JSON編碼字串的映射範本。使用 JavaScript,您可以寫入傳回物件的請求和回應處理常式。您不會傳回 JSON編碼的字串。

例如,使用下列VTL映射範本來取得 Amazon DynamoDB 項目:

{ "operation": "GetItem", "key": { "id": $util.dynamodb.toDynamoDBJson($ctx.args.id), } }

公用程式會$util.dynamodb.toDynamoDBJson傳回 JSON編碼字串。如果 $ctx.args.id 設定為 <id>,範本會評估為有效的 JSON編碼字串:

{ "operation": "GetItem", "key": { "id": {"S": "<id>"}, } }

使用 時 JavaScript,您不需要在程式碼中列印原始JSON編碼字串,而且toDynamoDBJson不需要像 一樣使用公用程式。上述映射範本的同等範例為:

import { util } from '@aws-appsync/utils'; export function request(ctx) { return { operation: 'GetItem', key: {id: util.dynamodb.toDynamoDB(ctx.args.id)} }; }

另一種方法是使用 util.dynamodb.toMapValues,這是處理值物件的建議方法:

import { util } from '@aws-appsync/utils'; export function request(ctx) { return { operation: 'GetItem', key: util.dynamodb.toMapValues({ id: ctx.args.id }), }; }

這評估為:

{ "operation": "GetItem", "key": { "id": { "S": "<id>" } } }
注意

我們建議搭配 DynamoDB 資料來源使用 DynamoDB 模組:

import * as ddb from '@aws-appsync/utils/dynamodb' export function request(ctx) { ddb.get({ key: { id: ctx.args.id } }) }

另一個範例是,採取下列映射範本將項目放入 Amazon DynamoDB 資料來源:

{ "operation" : "PutItem", "key" : { "id": $util.dynamodb.toDynamoDBJson($util.autoId()), }, "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args) }

評估時,此映射範本字串必須產生有效的 JSON編碼字串。使用 時 JavaScript,您的程式碼會直接傳回請求物件:

import { util } from '@aws-appsync/utils'; export function request(ctx) { const { id = util.autoId(), ...values } = ctx.args; return { operation: 'PutItem', key: util.dynamodb.toMapValues({ id }), attributeValues: util.dynamodb.toMapValues(values), }; }

評估為:

{ "operation": "PutItem", "key": { "id": { "S": "2bff3f05-ff8c-4ed8-92b4-767e29fc4e63" } }, "attributeValues": { "firstname": { "S": "Shaggy" }, "age": { "N": 4 } } }
注意

我們建議搭配 DynamoDB 資料來源使用 DynamoDB 模組:

import { util } from '@aws-appsync/utils' import * as ddb from '@aws-appsync/utils/dynamodb' export function request(ctx) { const { id = util.autoId(), ...item } = ctx.args return ddb.put({ key: { id }, item }) }