调用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,您将如何进行一些公共和一些私有查询/突变调用?

AWS Lambda 函数无法访问 AppSync GraphQL API - 权限被拒绝

实现 GraphQL 和 Flutter

AWS AppSync API graphlQL - 需要同步调用 [重复]