以下是在一个dynamoDB JSON对象上的AWS lambda中的node.js查询。 UserID是没有排序键的主键。 GeoHash是辅助密钥,索引名称为“GeoHash-index”。 调用成功没有错误,但不会导致返回任何内容。以下测试数据可能是错误的,因为它没有提供与索引名称的任何连接,但我是AWS / noSQL的新手并且有点丢失。
var AWS = require('aws-sdk');
var docClient = new AWS.DynamoDB({apiVersion: '2012-08-10'});
exports.handler = function(event,context,callback) {
console.log(JSON.stringify(event, null, ' '));
var tableName = "table1";
// getItem
docClient.getItem({
TableName: tableName,
IndexName: "GeoHash-index",
KeyConditionExpression: "GeoHash = :geohash",
ExpressionAttributeValues: {":geohash": "dpz886gb0tb0"}
}),
function(err,data){
if(err){
callback(err);
} else {
callback(null,data);
}
}
};
lambda测试数据
{
"GeoHash": "dpz886gb0tb0",
"Radius": 2,
"Timestamp": 1472601493180,
"UserID": "User1"
}
GeoHash字符串应该相互匹配。想法?
修改 这种方法没有成功
var AWS = require('aws-sdk');
var docClient = new AWS.DynamoDB({apiVersion: '2012-08-10'});
exports.handler = function index(event, context, callback) {
var params = {
TableName: "LocationAware1",
IndexName: "GeoHash-index",
KeyConditionExpression: "GeoHash = :geohash",
ExpressionAttributeValues: {
":geohash": {'S': 'dpz886gb0tb0'}
},
};
docClient.query(params, function(err, data) {
if (err)
console.log(JSON.stringify(err));
else
console.log(JSON.stringify(data));
});
}
答案 0 :(得分:1)
当你说呼叫成功而没有错误时,我假设你的意思是对lambda的调用
如果您使用的是节点版本4.3,则从该函数返回的方式已弃用,如aws lambda文档中的摘录所示
Node.js运行时v4.3支持可选的回调参数。您可以使用它来显式地将信息返回给调用者。一般语法是:
回调(错误错误,对象结果);
使用callback参数是可选的。如果不使用可选的回调参数,则行为与调用不带任何参数的callback()相同。您可以在代码中指定回调以将信息返回给调用者。 如果您不在代码中使用回调,AWS Lambda将隐式调用它,返回值为null。
如果使用节点版本4.3
,这是从aws lambda函数返回的正确方法
首先将第三个参数添加到处理函数中,如此
exports.handler = function(event,context,callback)
然后从函数返回时请遵循此表单
function(err,data){
if(err){
callback(err);
} else {
callback(null,data);
}
}
答案 1 :(得分:1)
var AWS = require('aws-sdk');
exports.handler = function(event,context,callback) {
var params = {
TableName: 'Table1',
IndexName: 'GeoHash-index',
KeyConditionExpression: 'GeoHash = :geohash',
ExpressionAttributeValues: {
':geohash': 'dpz886g8p9e2',
}
};
var docClient = new AWS.DynamoDB.DocumentClient();
docClient.query(params, function(err, data) {
if (err) callback(err);
else callback(null, data);
});
}
重写并且它很干净。