在AWS Amplify中,可以使用GraphQL计算字段内联解析器来处理自定义逻辑。下面是一个示例解决方法:
创建一个名为resolvers的文件夹,用于存放GraphQL解析器代码。
在resolvers文件夹中创建一个名为Query.js的文件,并添加以下代码:
const resolvers = {
Query: {
getUserFullName: async (parent, args, context) => {
const { userId } = args;
// 根据userId查询用户信息
const user = await context.app.models.User.findOne({ id: userId });
// 返回用户的全名
return `${user.firstName} ${user.lastName}`;
},
},
};
export default resolvers;
这个示例中,getUserFullName是一个自定义的计算字段,它接收一个userId参数,并返回该用户的全名。
aws-export.js文件,确保其中包含以下代码:const awsmobile = {
"aws_appsync_graphqlEndpoint": "YOUR_APPSYNC_ENDPOINT",
"aws_appsync_region": "YOUR_APPSYNC_REGION",
"aws_appsync_authenticationType": "API_KEY",
"aws_appsync_apiKey": "YOUR_APPSYNC_API_KEY",
};
export default awsmobile;
确保将YOUR_APPSYNC_ENDPOINT、YOUR_APPSYNC_REGION和YOUR_APPSYNC_API_KEY替换为你自己的AppSync配置信息。
在Amplify项目的根目录中,打开amplify/backend/api/文件夹,创建一个新的文件夹Query。
在Query文件夹中创建一个名为getUserFullName.req.vtl的文件,并添加以下代码:
#set($userId = $util.dynamodb.toDynamoDBJson($ctx.args.userId))
{
"version": "2017-02-28",
"operation": "InvokeLambdaFunction",
"payload": {
"field": "getUserFullName",
"arguments": {
"userId": $userId
}
}
}
这个文件定义了一个请求模板,用于将userId参数传递给Lambda函数。
Query文件夹中创建一个名为getUserFullName.res.vtl的文件,并添加以下代码:$util.toJson($ctx.result)
这个文件定义了一个响应模板,用于将Lambda函数的执行结果返回给AppSync。
在Amplify项目的根目录中,打开amplify/backend/api/文件夹,创建一个新的文件夹Mutation。
在Mutation文件夹中创建一个名为getUserFullName.js的文件,并添加以下代码:
const resolvers = require('../../resolvers/Query');
exports.handler = async (event) => {
const { field, arguments: args } = event.payload;
// 调用对应的解析器方法
const resolver = resolvers[field];
const result = await resolver(null, args, { app: { models: { User } } });
return result;
};
这个文件定义了一个Lambda函数,它将请求转发给对应的解析器方法,并返回解析器方法的执行结果。
在Amplify项目的根目录中,打开amplify/backend/api/文件夹,创建一个新的文件夹MappingTemplates。
在MappingTemplates文件夹中创建一个名为Query.getUserFullName.request的文件,并添加以下代码:
{
"version": "2017-02-28",
"operation": "Invoke",
"payload": {
"field": "getUserFullName",
"arguments": {
"userId": $util.toJson($ctx.args.userId)
}
}
}
这个文件定义了一个请求模板,用于将userId参数传递给Lambda函数。
在Amplify项目的根目录中,打开amplify/backend/api/文件夹,创建一个新的文件夹MappingTemplates。
在MappingTemplates文件
上一篇:AWS Amplify GraphQL 创建或更新/合并(Upsert)变更
下一篇:AWS Amplify graphql mutation可能会发生未处理的Promise拒绝和InvalidClientTokenId。