我不熟悉 Appsync 中使用 Javascript 解析器进行验证/错误处理的最佳实践(我正在使用 DynamoDB 数据源)。我无法返回一个当前在请求中带有错误消息的对象,而不抛出一个错误,说我需要一个“操作”...我有点困惑,因为你认为有一种方法可以不产生成本如果验证失败,则点击 DynamoDB,但我找不到这方面的文档。
export function request(ctx: Context) {
const cognitoSub = (ctx.identity as AppSyncIdentityCognito)?.claims?.sub;
const { firstName, lastName, country } = ctx.arguments || {};
if (!cognitoSub) {
return { error: 'User is not authenticated - Missing Cognito Sub.' };
}
if (!firstName || firstName.trim() === '') {
return { error: 'Validation failed - First name is required.' };
}
if (!lastName || lastName.trim() === '') {
return { error: 'Validation failed - Last name is required.' };
}
// Create an object with the validated values
const attributes: UserAttributes = {};
if (firstName) attributes.firstName = firstName;
if (lastName) attributes.lastName = lastName;
if (country) attributes.country = country;
// If validation passes, proceed with the UpdateItem operation
return {
operation: 'UpdateItem',
key: util.dynamodb.toMapValues({
'PK': `USER#${cognitoSub}`,
'SK': 'PROFILE#v1'
}),
attributeValues: util.dynamodb.toMapValues(attributes),
returnValues: 'ALL_NEW'
};
}
我尝试过抛出错误或简单地提前返回一个对象并在请求中显示错误消息,但除非存在“操作”,否则它不会接受它。如果存在操作,它将尝试查询 DynamoDB,如果您给它一个假操作名称,它将返回一个错误,指出该操作无效。
在内置 util
对象上使用
error 实用程序助手,让 AppSync 知道发生了验证错误:
if (!cognitoSub) {
util.error('User is not authenticated - Missing Cognito Sub.');
return;
}
@aws-appsync/utils
包中提供了类型定义,以帮助开发。