node.js - 无法使用新的 nodejs 8.10 将数据插入 DynamoDB
问题描述
我想使用新的 nodejs 8.10 来开发我的 lambdas。以节点 6.10 样式编写的一段简单代码有效,但当我使用节点 8.10 时,相同(相似)代码不起作用。
下面是成功将数据插入 dynamodb 表的工作代码(nodejs 6.10)
var AWS = require('aws-sdk');
// Set the region
AWS.config.update({region: 'us-east-1'});
var documentClient = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10'});
exports.handler = (event, context, callback) => {
// TODO implement
var params = {
Item: {
client: 'client_'+Math.random(),
Type: 1,
Status: true,
json: { foo: 'bar', address:{ city:'Pune', street: 'ABC Nagar', pin:'411099'} }
},
TableName: 'clients'
};
documentClient.put(params, function(err, data) {
if (err) {
console.log("Error", err);
callback(err, null);
} else {
console.log("Success", data);
// return "Hi, insert data completed";
callback(null, data);
}
});
};
下面是节点 8.10 样式,它不起作用(意味着不将数据插入到 dynamodb 表中)。我不断将null作为返回值。
var AWS = require('aws-sdk');
// Set the region
AWS.config.update({region: 'us-east-1'});
var documentClient = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10'});
exports.handler = async (event) => {
// TODO implement
var params = {
Item: {
client: 'client_'+Math.random(),
Type: 1,
Status: true,
json: { foo: 'bar', address:{ city:'Pune', street: 'ABC Nagar', pin:'411099'} }
},
TableName: 'clients'
};
documentClient.put(params, function(err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data);
return "Hi, insert data completed";
}
});
};
我花了 2-3 个小时搜索.. 找不到任何文章或任何类似的问题。谁能告诉我我做错了什么?
解决方案
Async / Await 是 promise 的语法糖,你documentClient.put
应该用 promise 包裹起来。由于 documentClient.put 是基于回调方法的,所以你必须用 promise 包装它
var AWS = require('aws-sdk');
// Set the region
AWS.config.update({region: 'us-east-1'});
var documentClient = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10'});
exports.handler = async (event) => {
// TODO implement
var params = {
Item: {
client: 'client_'+Math.random(),
Type: 1,
Status: true,
json: { foo: 'bar', address:{ city:'Pune', street: 'ABC Nagar', pin:'411099'} }
},
TableName: 'clients'
};
let putItem = new Promise((res, rej) => {
documentClient.put(params, function(err, data) {
if (err) {
console.log("Error", err);
rej(err);
} else {
console.log("Success", data);
res("Hi, insert data completed");
}
});
});
const result = await putItem;
console.log(result);
return result
};
注意:建议在单独的文件中使用 DB 操作,而不是在处理函数本身中使用
推荐阅读
- node.js - Gatsby develop 和 Gatsby info 都返回错误
- algorithm - 循环时间复杂度内的递归
- reactjs - 在 MobX-React 存储中应用代理对象而不是数组
- python - 用于 python Web 应用程序的 Heroku 非易失性内存
- python - Django 无法从我的数据库中删除用户
- python - 我的 Flask 无法正确显示 mysql 行
- r - 如何用特定日期替换丢失的日期并将格式保留为 R 中的日期
- python - Python:将numpy数组分配给变量
- json - 诉诸多维数组反应
- javascript - 为什么我的对象键值对被覆盖而不是创建新的键值对?