Javascript AWS Lambda函数未写入DynamoDB
我有一个lambda函数,假设它正在写入数据库。当我在本地机器上运行它时,它可以工作,但当我将它上传到lambda并测试它时,它不会将任何内容放入数据库中。我使用的函数角色完全可以访问DynamoDB,它的代码与我在笔记本电脑上运行DynamoDB时的代码完全相同。你知道为什么会这样吗 这是我的lambda。dao类包含实际访问dynamo的代码。我现在只是想上传一些常量字符串Javascript AWS Lambda函数未写入DynamoDB,javascript,amazon-web-services,aws-lambda,amazon-dynamodb,Javascript,Amazon Web Services,Aws Lambda,Amazon Dynamodb,我有一个lambda函数,假设它正在写入数据库。当我在本地机器上运行它时,它可以工作,但当我将它上传到lambda并测试它时,它不会将任何内容放入数据库中。我使用的函数角色完全可以访问DynamoDB,它的代码与我在笔记本电脑上运行DynamoDB时的代码完全相同。你知道为什么会这样吗 这是我的lambda。dao类包含实际访问dynamo的代码。我现在只是想上传一些常量字符串 const DAO = require('./PostStatusDAO.js'); exports.handler
const DAO = require('./PostStatusDAO.js');
exports.handler = async (event, context, callback) => {
var dao = new DAO();
dao.post("this is a test", "@jordan", "@matt", "none");
const response = {
statusCode: 200,
body: {
result: "good"
}
};
return response;
};
要查看函数失败的原因,您必须同步运行它,或者将承诺返回给调用方/运行时,如下所示:
const DAO = require('./PostStatusDAO.js');
exports.handler = async(event, context, callback) => {
var dao = new DAO();
// Return new promise
return new Promise(function(resolve, reject) {
// Do async job
dao.post("this is a test", "@jordan", "@matt", "none", function(err, data) {
if (err) {
console.log("Error: ", err);
reject(err);
}
else {
console.log("Data: ", data);
resolve(data);
}
})
})
};
您应该等待
ddb.put
操作完成,然后再从lambda返回响应。CloudWatch日志中显示了什么?
const DAO = require('./PostStatusDAO.js');
exports.handler = async(event, context, callback) => {
var dao = new DAO();
// Return new promise
return new Promise(function(resolve, reject) {
// Do async job
dao.post("this is a test", "@jordan", "@matt", "none", function(err, data) {
if (err) {
console.log("Error: ", err);
reject(err);
}
else {
console.log("Data: ", data);
resolve(data);
}
})
})
};
const AWS = require('aws-sdk');
const ddb = new AWS.DynamoDB.DocumentClient({region: 'us-west-2'});
class PostStatusDAO {
async post(in_text, in_user, in_author, in_attachment, callback) {
var params = {
Item: {
user: String(in_user),
timestamp: Date.now(),
author: String(in_author),
text: String(in_text),
attachment: String(in_attachment),
},
TableName: 'Feed',
};
console.log(params);
return ddb.put(params, callback).promise();
}
}
module.exports = PostStatusDAO;