调用graphql api时Flutter aws放大不返回数据
Posted
技术标签:
【中文标题】调用graphql api时Flutter aws放大不返回数据【英文标题】:Flutter aws amplify not returning data when calling graphql api 【发布时间】:2021-12-18 07:37:04 【问题描述】:单击按钮时,我已编程调用连接到 Lambda 函数的 graphql api,该函数正在从 dynamodb 表中提取数据。该查询不会产生任何错误,但它也不会给我任何结果。我还检查了 cloudwatch 日志,没有看到任何调用函数的痕迹。不确定我在这里犯的粗心错误。
这是我的 api
void findUser() async
try
String graphQLDocument = '''query getUserById(\$userId: ID!)
getUserById(userId: \$id)
id
name
''';
var operation = Amplify.API.query(
request: GraphQLRequest<String>(
document: graphQLDocument,
variables: 'id': 'USER-14160000000'));
var response = await operation.response;
var data = response.data;
print('Query result: ' + data);
on ApiException catch (e)
print('Query failed: $e');
这是我的 lambda 函数 -
const getUserById = require('./user-queries/getUserById');
exports.handler = async (event) =>
var userId = event.arguments.userId;
var name = event.arguments.name;
var avatarUrl = event.arguments.avatarUrl;
//console.log('Received Event - ', JSON.stringify(event,3));
console.log(userId);
switch(event.info.fieldName)
case "getUserById":
return getUserById(userId);
;
const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient(region: 'ca-central-1');
async function getUserById(userId)
const params =
TableName:"Bol-Table",
KeyConditionExpression: 'pk = :hashKey and sk = :sortKey',
ExpressionAttributeValues:
':hashKey': userId,
':sortKey': 'USER'
;
try
const Item = await docClient.query(params).promise();
console.log(Item);
return
id: Item.Items[0].pk,
name: Item.Items[0].details.displayName,
avatarUrl: Item.Items[0].details.avatarUrl,
createdAt: Item.Items[0].details.createdAt,
updatedAt: Item.Items[0].details.updatedAt
;
catch(err)
console.log("BOL Error: ", err);
module.exports = getUserById;
点击按钮后,我得到了这个
【问题讨论】:
您可以尝试将您的graphQLDocumnet 更改为String graphQLDocument = '''query getUserById(\$id: ID!) getUserById(userId: \$id) id name ''';
您的变量是$userId,然后是$id。尝试在变量对象等两个地方都调用它。
@Andrija 你是对的。你能把你的评论作为答案吗?
【参考方案1】:
将我的评论移至答案:
您可以尝试将您的 graphQLDocumnet 更改为
String graphQLDocument = '''query getUserById(\$id: ID!)
getUserById(userId: \$id)
id
name
''';
您的变量是$userId
,然后是$id
。尝试在变量对象等两个地方都调用它$id
。
【讨论】:
【参考方案2】:您的颤动代码工作正常,但在来自 aws 的 lambda 中返回空白字符串“”以不打印任何内容
【讨论】:
抱歉,Ruchit,没完全明白你说的。我在 lambda 上返回 Id 值。你能用一些代码来详细说明答案吗?以上是关于调用graphql api时Flutter aws放大不返回数据的主要内容,如果未能解决你的问题,请参考以下文章
必须在 AWS amplify 中为 Source 提供 graphql API 调用
从 lambda 调用 AWS AppSync GraphQL API 变异查询
使用 AWS Amplify Auth 和 GraphQL API,您将如何进行一些公共和一些私有查询/突变调用?