在使用 AWS AppSync 和 @connection 指令时,确实无法直接建立双向连接。不过,你可以通过以下方法来模拟双向连接的行为。
假设我们有两个类型:User 和 Post,一个用户可以拥有多个帖子,一个帖子只属于一个用户。我们可以使用 @connection 指令将它们关联起来,但无法直接在 User 类型中获取与之相关的帖子列表。
为了解决这个问题,我们可以使用 Lambda 函数和自定义查询来获取双向连接的行为。下面是一个示例:
首先,我们需要创建一个 Lambda 函数来获取用户的帖子列表。在 AWS 控制台的 Lambda 服务中,创建一个新的函数,并将以下代码粘贴到函数中:
const AWS = require('aws-sdk');
const ddb = new AWS.DynamoDB.DocumentClient();
exports.handler = async (event) => {
const userId = event.arguments.userId;
const params = {
TableName: 'Posts',
FilterExpression: 'userId = :userId',
ExpressionAttributeValues: {
':userId': userId
}
};
try {
const result = await ddb.scan(params).promise();
return result.Items;
} catch (error) {
console.log(error);
throw new Error('Error getting posts');
}
};
然后,我们需要在 AWS 控制台的 AppSync 服务中创建一个新的查询。在类型定义中,添加以下代码:
type User {
id: ID!
name: String
posts: [Post]
}
type Post {
id: ID!
title: String
}
type Query {
getUserPosts(userId: ID!): [Post]
}
在解析器模板中,添加以下代码:
#set($userId = $ctx.args.userId)
{
"version" : "2017-02-28",
"operation" : "Invoke",
"payload" : {
"field" : "getUserPosts",
"arguments" : {
"userId" : $userId
}
}
}
这样,我们就可以在 User 类型中获取与之相关的帖子列表了。在 GraphQL 客户端中,我们可以使用以下查询语句来获取用户的帖子列表:
query GetUserPosts($userId: ID!) {
getUserPosts(userId: $userId) {
id
title
}
}
这样,我们就可以模拟双向连接的行为了。当我们查询用户时,可以通过 getUserPosts 查询获取与之相关的帖子列表。
希望以上解决方法对你有所帮助!