Jam*_*esG 1 json amazon-web-services amazon-dynamodb aws-lambda
出于某种原因,我在完成请求错误之前退出了进程.
这是我的代码:
var http = require('http');
var aws = require('aws-sdk');
var ddb = new aws.DynamoDB();
function getUser(userid) {
var q = ddb.getItem({
TableName: "clients",
Key: {
ClientID: { S: userid } }
}, function(err, data) {
if (err) {
console.log(err);
return err;
}
else {
console.log(data);
}
});
//console.log(q);
}
exports.handler = function(event, context) {
getUser('user23');
console.log("called DynamoDB");
};
Run Code Online (Sandbox Code Playgroud)
谷歌搜索后,有人建议将时间更改为更高的金额.我做了一分钟.
但是这个功能只采用了:
持续时间:2542.23毫秒
我还检查并仔细检查了表名和密钥名称等...
控制台日志有:
2016-03-21T04:09:46.390Z - 收到活动
2016-03-21T04:09:46.751Z - 名为DynamoDB
2016-03-21T04:09:47.012Z - {}
END RequestId:id123
任何人都可以看到为什么这不起作用?
根据下面的答案我试过:
console.log('Loading event');
var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
exports.handler = function(event, context) {
console.log(JSON.stringify(event, null, ' '));
dynamodb.listTables(function(err, data) {
console.log(JSON.stringify(data, null, ' '));
});
var tableName = "clients";
var datetime = new Date().getTime().toString();
dynamodb.getItem({
TableName: tableName,
Key: {
ClientID: { S: "gr5f4sgnca25hki" } }
}, function(err, data) {
if (err) {
context.done('error','putting item into dynamodb failed: '+err);
}
else {
context.done(data);
}
});
};
Run Code Online (Sandbox Code Playgroud)
但现在我的回答是:
"errorMessage":"[object Object]"
我想要做的是:检查项目是否存在于数据库中.从条目中获取参数(如果存在),然后使用参数执行某些操作
首先,context.done
期望一个Error
对象作为第一个参数,而不是包含该单词的字符串"error"
.其次,如果Error
对象为null或未定义,则终止将被视为成功.
现在,考虑一下你的回调函数:
function (err, data)
{
if (err) {
context.done('error', 'putting item into dynamodb failed: ' + err);
}
else {
context.done(data);
}
}
Run Code Online (Sandbox Code Playgroud)
如果你有一个错误,那么你的lambda将在一个失败中终止,这是预期的,但errorMessage
你会得到的只是"error"
,这没有多少信息.
如果没有错误,那么你的拉姆达也将终止在一个失败,因为你传递data
的第一个参数来context.done
,记住第一个参数总是Error
对象.
要解决此问题,您只需执行以下操作:
function (err, data)
{
if (err) {
context.done(err);
} else {
context.done(null, data);
}
}
Run Code Online (Sandbox Code Playgroud)
甚至更好:
function (err, data)
{
context.done(err, data);
}
Run Code Online (Sandbox Code Playgroud)
如果您不想处理该项并立即返回它,则可以将其context.done
用作DynamoDB操作的回调函数:
dynamodb.getItem({
TableName: tableName,
Key: {
ClientID: { S: "gr5f4sgnca25hki" }
}
}, context.done);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6779 次 |
最近记录: |