AWS控制台中的AWS Node.js Lambda POST函数

时间:2019-03-01 23:01:44

标签: node.js function amazon-web-services post aws-lambda

我正在尝试在AWS控制台内部创建一个lambda函数,该函数对我的DynamoDB表记录执行记录的POST。

运行测试时,我目前收到一条成功消息,因为我还没有连接触发器,但是测试消息返回了null,并且没有向表中发布任何内容。

我已经遍历了AWS开发工具包SDK文档,但是在运行lambda函数所需的exports.handle方面,我找不到所需的内容。我看到没有导出的代码端Node.js。

我已经尝试过像这样设置recordId和recordAlbum,

let recordId = 1;
let recordAlbum = "Album";

并且在测试时只会返回结构错误。

有人对此有任何资源或经验吗?我在玩,以构建无服务器的CRUD应用程序。任何建议或资源都将真正帮助您。

这是我在AWS Lambda函数中使用的代码。

let AWS = require('aws-sdk');
// Set the region 
AWS.config.update({region: 'us-east-1'});

// Create the DynamoDB service object
let ddb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
let recordId = {N: '001'};
let recordAlbum = {S: 'Album Here'}

exports.handler = async function(event, context) {

  let params = {
    TableName: 'TABLE_NAME',
    Item: {
      'recordId' : recordId,
      'album' : recordAlbum
    }
  };

  console.log('generating record ID', recordId);
  console.log('generating Album', recordAlbum);
  console.log('generated parmas', params);
    // Call DynamoDB to add the item to the table
    ddb.putItem(params, function(err, data) {
      if (err) {
        console.log("Error", err);
      } else {
        console.log("Success", data);
      }
    });   
} 

2 个答案:

答案 0 :(得分:0)

您有一个async处理程序,因此您应该使用Promise而不是回调。

尝试一下:

exports.handler = async function(event, context) {

  let params = {
    TableName: 'TABLE_NAME',
    Item: {
      'recordId' : recordId,
      'album' : recordAlbum
    }
  };

  console.log('generating record ID', recordId);
  console.log('generating Album', recordAlbum);
  console.log('generated parmas', params);

  try {
    let result = await ddb.putItem(params).promise();
    console.log(result);
  } 
  catch(err)
  {
    console.error(err);
  }

} 

有关AWS JS SDK中的async/await on the AWS blogdocumentation on the promise() method的更多信息。

答案 1 :(得分:0)

通过遵循步骤3并修改信息,可以在本教程中找到该问题的一个答案。

我将“ Id”更改为“ id”,并将exports.writeMovie更改为exports.handler

https://hackernoon.com/create-a-serverless-rest-api-with-node-js-aws-lambda-dynamodb-api-gateway-f08e7111fd16

它不使用async和await,虽然已经过时,但是可以使用。