【发布时间】:2020-01-22 21:42:02
【问题描述】:
所以我尝试从 dynamodb 获取数据,使用下面的代码,我得到 null 并且在调用查询函数后没有显示日志。
我在本地试了一下,它在本地工作,只是通过lambda函数它不起作用,我还检查了我的角色是否有读取dynamodb的权限,是的。所以我对此一无所知
"use strict";
const config = require("./config");
const AWS = require("aws-sdk");
AWS.config.update({
region: "us-east-1"
});
let dynamodb = new AWS.DynamoDB.DocumentClient({
region: "us-east-1"
});
var getAnswerToQuestion = (questionKey, callback) => {
var params = {
TableName: "genral-questions-db",
KeyConditionExpression: "#questionKey = :question",
ExpressionAttributeNames: {
"#questionKey": "question"
},
ExpressionAttributeValues: {
":question": String(questionKey)
}
};
console.log("Trying to query dynamodb");
dynamodb.query(params, (err, data) => {
if(err) {
console.log (err)
callback(err);
} else {
console.log(data.Items);
callback(data.Items[0]);
}
});
}
module.exports = {
getAnswerToQuestion
};
日志:
Function Logs:
START RequestId: 6adeddbe-4925-4877-a2c0-d20576145224 Version: $LATEST
2019-09-22T17:35:30.088Z 6adeddbe-4925-4877-a2c0-d20576145224 event.bot.name=bcbsri
2019-09-22T17:35:30.088Z 6adeddbe-4925-4877-a2c0-d20576145224 dispatch userId=pn6yexoq87uej2evt9huhilc5f99bhb7, intentName=GenralQuestionIntent
2019-09-22T17:35:30.088Z 6adeddbe-4925-4877-a2c0-d20576145224 GenralQuestionIntent was called - Srinivas
2019-09-22T17:35:30.089Z 6adeddbe-4925-4877-a2c0-d20576145224 have to query the db hsa
2019-09-22T17:35:30.089Z 6adeddbe-4925-4877-a2c0-d20576145224 Trying to query dynamodb
END RequestId: 6adeddbe-4925-4877-a2c0-d20576145224
REPORT RequestId: 6adeddbe-4925-4877-a2c0-d20576145224 Duration: 596.83 ms Billed Duration: 600 ms Memory Size: 128 MB Max Memory Used: 76 MB Init Duration: 193.27 ms
甚至没有出错,它只是不返回任何数据。请帮我解决这个问题
编辑: 这是我试图调用 utils 方法(db)的代码
module.exports = function(intentRequest) {
return new Promise((resolve, reject) => {
// Resolve question key
const questionKey = intentRequest.currentIntent.slots.QuestionKey;
let speechText;
console.log('have to query the db', questionKey);
utils.getAnswerToQuestion(questionKey, res => {
if(res ) {
speechText = res.answer;
} else {
speechText = "Sorry, details about " + questionKey + " was not found";
}
const response = {
fullfilmentState: 'Fulfilled',
message: { contentType: 'PlainText', content: speechText }
};
console.log(response);
resolve(response);
return lexResponses.close(intentRequest.sessionAttributes, response.fullfilmentState, response.message);
});
});
};
【问题讨论】:
-
提供你使用
getAnswerToQuestion函数的地方。 -
我看到你把数据放到
callback函数的第一个参数里了。 -
我在第二个参数中进行了修改,从回调中获取数据(但响应为空),并且您要求的代码已被编辑
-
这仍然是一个
async问题。return await new Promise -
您的表中可能没有任何键值为
hsa的项目。只需尝试获取更多信息以进行调试,记录您的查询参数console.log("Trying to query dynamodb", params);。在resolve(response);之后不要做任何事情
标签: node.js amazon-web-services aws-lambda amazon-dynamodb