【问题标题】:Unable to return result when using AWS Lambda NodeJS使用 AWS Lambda NodeJS 时无法返回结果
【发布时间】:2020-06-14 03:46:55
【问题描述】:

我正在尝试在 AWS Lambda 上实现一个简单的 Node Js 函数来查询来自 dynamoDB 的数据。 我将这个 lambda 函数连接到我的 API 网关,但是当我访问 API url 时没有看到任何结果。

//Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set the region
AWS.config.update({region: 'us-east-1'});

// Create DynamoDB service object
var b = new AWS.DynamoDB({apiVersion: '2012-08-10'});

var params = {
   ExpressionAttributeNames: {
    "#devicetimestamp": "timestamp"
  },
  ExpressionAttributeValues: {
    ':unitID': {S: 'arena-MXHGMYzBBP5F6jztnLUdCL'},
    ':dtimestamp' : {S: '1582920096000'}
   },
 KeyConditionExpression: 'id = :unitID and #devicetimestamp > :dtimestamp',
 TableName: 'IoTdata2'
};

b.query(params, function(err, results) {
    if (err) {
        console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
    } else {
        console.log("Query succeeded.");
        console.log(JSON.stringify(results));
    }
});

当我看到console.log(JSON.stringify(results)); 的结果时,代码运行良好 当我使用事件处理程序时

//Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set the region
AWS.config.update({region: 'us-east-1'});

// Create DynamoDB service object
var b = new AWS.DynamoDB({apiVersion: '2012-08-10'});

exports.handler =  (event, context, callback) => {

var params = {
   ExpressionAttributeNames: {
    "#devicetimestamp": "timestamp"
  },
  ExpressionAttributeValues: {
    ':unitID': {S: 'arena-MXHGMYzBBP5F6jztnLUdCL'},
    ':dtimestamp' : {S: '1582920096000'}
   },
 KeyConditionExpression: 'id = :unitID and #devicetimestamp > :dtimestamp',
 TableName: 'IoTdata2'
};

b.query(params, function(err, results) {
    if (err) {
        console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
        callback(err);
    } else {
        console.log("Query succeeded.");
        console.log(JSON.stringify(results));
       callback(null, results);
    }
});
};

```i don't see any response in API URL.I am new to nodeJS, Any suggestions will be greatly appreciated. Thanks

【问题讨论】:

  • 发布所有相关代码,包括导出和触发回调
  • @bryan60 更新了帖子。我曾经执行相同的导出处理程序实现来从 mysql 查询数据,并且它曾经工作正常。谢谢
  • 一切看起来都很好...可以尝试将您的查询回调放在箭头函数中,以确保在范围内正确定义回调。但这里不应该需要。你怎么调用
  • 我从 AWS api 网关创建了一个 REST API 获取方法,并在集成点使用了这个 lambda 函数。 7gzx1fdgn5.execute-api.us-east-1.amazonaws.com/prod/test这是网址谢谢
  • 不能用 url 做很多事情。您需要遵循一些调试步骤。 1. 直接调用您的 lambda 并确认它按预期工作。如果是这样, 2. 将您的网关配置为使用虚拟参数进行响应并确认其按预期工作。如果是这样,3. 将您的 lambda 配置为仅回调一个虚拟值并确认它按预期工作。那里的某处会破裂。如果它们都有效,那么你就有了一个真正的谜

标签: node.js amazon-web-services aws-lambda aws-api-gateway


【解决方案1】:

由于您要通过 API 网关,因此您需要满足来自 lambda 的特定响应协定,请尝试这样做:

const response = {
  statusCode: 200, // need a status code
  body: JSON.stringify(results) // and a string body
}

callback(null, response)

这里有更多信息:TUTORIAL: Build a Hello World API with Lambda Proxy Integration - Amazon API Gateway

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-10
    • 2020-09-21
    • 2017-11-13
    • 1970-01-01
    • 2020-09-18
    • 2019-01-05
    • 2023-03-19
    • 2019-09-04
    相关资源
    最近更新 更多