【问题标题】:Flutter aws amplify not returning data when calling graphql api调用graphql api时Flutter aws放大不返回数据
【发布时间】: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 你是对的。你能把你的评论作为答案吗?

标签: amazon-web-services flutter graphql aws-amplify


【解决方案1】:

将我的评论移至答案:

您可以尝试将您的 graphQLDocumnet 更改为

String graphQLDocument = '''query getUserById(\$id: ID!) {
     getUserById(userId: \$id) { 
            id
            name
     }
}'''; 

您的变量是$userId,然后是$id。尝试在变量对象等两个地方都调用它$id

【讨论】:

    【解决方案2】:

    您的颤动代码工作正常,但在来自 aws 的 lambda 中返回空白字符串“”以不打印任何内容

    【讨论】:

    • 抱歉,Ruchit,没完全明白你说的。我在 lambda 上返回 Id 值。你能用一些代码来详细说明答案吗?
    猜你喜欢
    • 2022-12-29
    • 2022-01-16
    • 1970-01-01
    • 2023-03-28
    • 2019-06-12
    • 2022-11-11
    • 2017-06-02
    • 2020-02-13
    • 2020-07-10
    相关资源
    最近更新 更多