【发布时间】: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