【发布时间】: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