node.js - AWS DocumentClient 查询从未被调用
问题描述
我正在查询这样的全局二级索引:
const AWS = require("aws-sdk");
AWS.config.update({ region: "us-east-1" });
const docClient = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10'});
exports.handler = (event, context, callback) => {
console.log("EVENT\n" + JSON.stringify(event, null, 2));
context.callbackWaitsForEmptyEventLoop = false;
const requestBody = JSON.parse(event.body);
const guestName = requestBody.guestName;
var params = {
TableName: "realize-guests",
IndexName: "GuestName-index",
KeyConditionExpression: "GuestName = :guestName",
ExpressionAttributeValues: {
":guestName": guestName
},
ProjectionExpression:
"GuestName, Info, LinkedInUrl, S3ImageUrl, Titles, Company"
};
console.log("DEBUG\n" + "Query request: [" + guestName + "]");
docClient.query(params, function(err, data) {
if (err) {
console.log(
"ERROR\nCould not retrieve data from realize-guests\nError is: [" + err + "]");
callback(null, failure(err));
}
else {
console.log("DEBUG\n" + "Query complete: [" + data + "]");
callback(null, success(data));
}
});
};
令人惊讶的是,似乎没有调用docClient.query或者它进入空间,因为日志显示如下:
16:30:25 START RequestId: bd2232f1-bf26-48f5-8e22-809eb41bd67a Version: $LATEST
16:30:25 2019-08-27T16:30:25.125Z bd2232f1-bf26-48f5-8e22-809eb41bd67a DEBUG Query request: [Bob Smith]
16:30:25 END RequestId: bd2232f1-bf26-48f5-8e22-809eb41bd67a
16:30:25 REPORT RequestId: bd2232f1-bf26-48f5-8e22-809eb41bd67a Duration: 813.90 ms Billed Duration: 900 ms Memory Size: 128 MB Max Memory Used: 75 MB
日志从不显示指示docClient.query已执行/完成的 ERR 或 DEBUG 语句,我对原因感到困惑。
顺便说一句,我可以通过 AWS CLI 进行相同的查询并检索必要的数据。
想法?
解决方案
我会使用 async/await 而不是回调。您所描述的内容听起来像是查询的异步性质的问题:
您的函数如下所示:
module.exports.handler = async (event, context) => {
const params = {
TableName: "realize-guests",
IndexName: "GuestName-index",
KeyConditionExpression: "GuestName = :guestName",
ExpressionAttributeValues: {
":guestName": guestName
},
ProjectionExpression:
"GuestName, Info, LinkedInUrl, S3ImageUrl, Titles, Company"
};
try {
const data = await docClient.query(params).promise();
return { statusCode: 200, body: JSON.stringify({ params, data }) };
} catch (error) {
return {
statusCode: 400,
error: `Could not query: ${error.stack}`
};
}
};
推荐阅读
- javascript - 当用户滚动到该部分时,如何使用 JS(无库)激活 CSS 动画?
- android - android sqlite数据库是否与读写操作同步?
- random - vim rand() 不是确定性的。这是预期的吗?
- php - Onchange 无法得到正确的值
- python - 如何使用 re 在变量中找到特定字符串并进行更改?
- java - 尝试添加向上按钮时,Android子操作栏与父操作栏保持不变
- apache-spark - 使用 Spark Structured Streaming 从 Kafka 主题读取:发布到 Kafka 主题的多行 JSON 是否可以被 Spark 解析?
- php - 如果选中复选框,则显示消息 hello 否则显示 hi
- python - 确定剪刀石头布的获胜者 [python]
- python - 使用 group by 绘制条形图