AppSync GraphQL查询在JavaScript中过滤失效问题求助
解决AWS AppSync GraphQL查询filter参数失效问题
问题根源
你的filter和limit参数传递方式错误——它们需要被包裹在variables对象中,而非直接与query字段平级。这种写法导致AppSync服务器未接收到过滤条件,因此返回了所有用户数据。
修正后的代码
async function findUser(login_email) { console.log("login email: " + login_email) const user = await client.graphql({ query: listUsers, // 所有查询变量必须放在variables字段内 variables: { filter: {email: {eq: login_email}}, limit: 1, }, }); console.log("all users: " + JSON.stringify(user)); }
关键说明
从你提供的Codegen生成的listUsers查询定义可以看到,该查询明确接受$filter、$limit这类命名变量:
export const listUsers = /* GraphQL */ ` query ListUsers( $filter: ModelUserFilterInput $limit: Int $nextToken: String ) { listUsers(filter: $filter, limit: $limit, nextToken: $nextToken) { items { id email username gender password profile createdAt updatedAt __typename } nextToken __typename } } `;
AWS AppSync客户端的graphql方法要求,所有需要传递给服务器的查询变量必须放在variables对象中,否则服务器无法识别这些参数,自然会忽略过滤逻辑。
验证方式
可以通过浏览器开发者工具的Network面板,查看发送给AppSync的请求体,确认variables字段是否包含了正确的filter和limit值,以此验证参数是否正确传递。
内容的提问来源于stack exchange,提问作者david backx
相关产品推荐
相关产品推荐

