Node.js Lambda函数无法从dynamo DB获取amazon lex的数据-空响应
我对node非常陌生,在尝试对AWS lambda dynamo DB集成进行简单测试以获得Amazon Lex请求的响应时遇到了一个问题。如果有人能说出需要改变的地方,我们将不胜感激。谢谢 Runtime-NodeJS10.x,并在NodeJS8.10上进行了尝试。。 下面是node JS示例代码:Node.js Lambda函数无法从dynamo DB获取amazon lex的数据-空响应,node.js,amazon-web-services,aws-lambda,amazon-dynamodb,Node.js,Amazon Web Services,Aws Lambda,Amazon Dynamodb,我对node非常陌生,在尝试对AWS lambda dynamo DB集成进行简单测试以获得Amazon Lex请求的响应时遇到了一个问题。如果有人能说出需要改变的地方,我们将不胜感激。谢谢 Runtime-NodeJS10.x,并在NodeJS8.10上进行了尝试。。 下面是node JS示例代码: const AWS = require('aws-sdk'); var DBHandler = require("./DBHandler") exports.handler = async (
const AWS = require('aws-sdk');
var DBHandler = require("./DBHandler")
exports.handler = async (event) => {
console.log('This event is' +JSON.stringify(event))
var intent = event.currentIntent.name;
DBHandler.getalldetails(intent , function (err , data ) {
if (err) {
context.fail(err);
} else {
var response = {
"dialogAction": {
"type": "Close",
"fulfillmentState": "Fulfilled",
"message": {
"contentType": "PlainText",
"content": "data.Item.Message."
}
}
}
return response
//callback ( null, response );
}
});
};
下面是同一lamdba函数文件夹下另一个文件中的./DBHandler
const AWS = require('aws-sdk');
AWS.config.update({
region:"eu-west"
});
var docClient = new AWS.DynamoDB.DocumentClient();
var tableName = "testholly";
//exports.handler = (event,context,callback) => {
var getalldetails = (Intent,callback) => {
var params = {
TableName : tableName,
Key: {
"Intent":Intent
}
};
docClient.get(params,function (err,data) {
callback (err , data);
});
};module.exports = {
getalldetails
};
您的响应不在getAllDetails的回调中…应该是。比如:
exports.handler = async (event, context, callback) => {
console.log('This event is' + JSON.stringify(event))
var intent = event.currentIntent.name;
DBHandler.getalldetails(intent, function (err, data) {
if (err) {
context.fail(err);
} else {
var response = {
"dialogAction": {
"type": "Close",
"fulfillmentState": "Fulfilled",
"message": {
"contentType": "PlainText",
"content": data.Item.Message
}
}
}
callback(null, response)
}
});
};
你不能使用wait w/callbacks,你需要向那个坏孩子保证。在上面,我将回调传递给处理程序。首先检查对该lambada的Dynamo DB访问权限。如果没有给出,则创建一个角色来访问dynamoDB表并将其分配给lambda函数 如果您想在不使用角色的情况下访问dynamodb,那么在AWS.config中使用cognitopool ID或AWS-access-key-Secret-access-key 样本:
AWS.config.update({
accessKeyId: "",
secretAccessKey: "",
region: "us-east-1"
});
或
Hi LostJon-如果移动回调以传递给处理程序,则会出现语法错误。解析错误-意外的令牌回调再次感谢LostJon-我已经尝试了该选项,没有错误,但Dynamo DB中的值为空…您能确认您的访问代码实际检索数据吗?如果不是,那可能是你的问题
AWS.config.update({
"region":"us-east-1"
});
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId:"Your identity_pool_id"
});