Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Lambda函数无法从dynamo DB获取amazon lex的数据-空响应_Node.js_Amazon Web Services_Aws Lambda_Amazon Dynamodb - Fatal编程技术网

Node.js Lambda函数无法从dynamo DB获取amazon lex的数据-空响应

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 (

我对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 (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"
   });