我知道nodejs中的模块是同步的,但我遇到的问题是在该模块中,它使用aws-sdk对DynamoDB进行异步调用。因此,模块在对DynamoDB的异步调用之前完成,并允许其余的nodejs应用程序继续。
我放在一起的模块是为了从DynamoDB获取环境变量,并将它们设置为在APP中使用,这意味着要在运行时完成一次。
这是一个nodejs lambda函数,因此需要在运行时完成,而不是每次运行该函数。
以下是我的模块代码:
var AWS = require("aws-sdk");
var config = require("../config/config.js");
module.exports = {
setEnv: function(){
AWS.config.update({
region: config.awsregion,
accessKeyId: process.env.AWSDYNAMOACCESS,
secretAccessKey: process.env.AWSDYNAMOSECRET,
sslEnabled: true,
maxRetries: 5
});
var db = new AWS.DynamoDB.DocumentClient();
var table = config.envTable;
var params = {
TableName: table,
Key: {
"type": config.envType
}
};
db.get(params, function(err, data) {
if (err) {
console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2));
} else {
console.log("GetItem succeeded:", JSON.stringify(data, null, 2));
process.env.APIKEY = data.Item.tkey;
process.env.KEYEXPIRE = data.Item.tkeyexpire;
}
});
}
};
module.exports.load = module.exports.setEnv
任何建议都将不胜感激。