查询DynamoDB时响应为空

时间:2019-06-02 13:43:27

标签: amazon-web-services aws-lambda amazon-dynamodb

我正在从用node.js env编写的lambda函数查询dynamodb-

尝试查询“货币价格”表,其中“货币”列的值为“ BLC”。 当我在lambda控制台中测试我的功能时--打印直到第二个控制台日志-“查询数据库ConsolePrice”并返回NULL响应。它不会打印接下来的两个控制台日志中的任何一个,并且不确定是否甚至正在连接到数据库。

似乎代码根本没有进入ddb.query()函数中-试图将所有记录器都置于该函数中,但没有输出。

我尝试检查所有可能的aws文档,但无法理解为什么未执行此功能。

我的代码如下所示-

var AWS = require ('aws-sdk');
exports.handler = async (event) => 
{ 
  AWS.config.update({region: 'ap-southeast-2'});
  console.log("i am in function");
  // Create DynamoDB service object
  var ddb = new AWS.DynamoDB.DocumentClient();
  var table = 'CurrencyPrice';
  var params = {
    "Select": "ALL_ATTRIBUTES","TableName": "CurrencyPrice",
  };
  console.log("querying DB" + table);
  ddb.query(params, function(err, data) {
    console.log("i am in ddb query");
    if (err) {
      console.error("Unable to query. Error:", JSON.stringify(err, null,2));
    } else {
      console.log(data);   
    }
  });
};

我在lambda控制台中得到的当前结果:

Response:
null
Request ID:"XXXX"
Function Logs:
START RequestId: XXX Version: $LATEST
2019-06-02T13:31:55.189Z    XXXX    INFO    i am in function
2019-06-02T13:31:55.331Z    XXXX    INFO    querying DBCurrencyPrice
2019-06-02T13:31:55.390Z    XXXX    INFO    { Select: 'ALL_ATTRIBUTES', TableName: 'CurrencyPrice' }
END RequestId: XXXX

我希望至少它会打印“无法查询”或连接到数据库并进行查询的实际数据?

3 个答案:

答案 0 :(得分:1)

AWS示例

ddbClient.query(params, callback)

显示同步问题。执行将继续,等待回调完成。这就是为什么您得到Null

您将必须将此.query()调用包装到Promise中,因此执行将等待此回调完成。

答案 1 :(得分:0)

如果您使用的是async/await,则希望返回一个承诺。

var AWS = require("aws-sdk");
AWS.config.update({ region: "ap-southeast-2" });
var ddb = new AWS.DynamoDB.DocumentClient();

exports.handler = async event => {

  console.log("i am in function");
  // Create DynamoDB service object

  var table = "CurrencyPrice";
  var params = {
    Select: "ALL_ATTRIBUTES",
    TableName: "CurrencyPrice"
  };
  console.log("querying DB" + table);

  return ddb
    .query(params)
    .promise()
    .then((err, data) => {
        console.log("i am in ddb query");
        if (err) {
            console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
        } else {
            console.log(data);
        }
    });
};

答案 2 :(得分:0)

查询一个诺言并等待其履行状态。

const promise = await ddb.query(params, function(err, data) {
   console.log("i am in ddb query");
   if (err) {
    console.error("Unable to query. Error:", JSON.stringify(err, null,2));
   } else {
    console.log(data);
    // process your data   
   }
}).promise();
return promise;