首页 > 解决方案 > 从 Lambda 中的 JSON 提取数据,因此它不是未定义的

问题描述

寻求建议/第二意见。我正在尝试通过 HTTP API(api 网关)> Lambda 传递 JSON。我正在接收数据(Cloudwatch 的图片),尝试提取值时未定义。该文件正在写入 S3,但未定义。

我包括了 Lambda 代码,Cloudwatch 日志的图片。我在那儿:)。新手来了...

日志 显示正在检索的数据的日志

拉姆达代码

var AWS = require('aws-sdk');
var s3 = new AWS.S3();

exports.handler = async (event, context, callback) => {

  var bucketName = process.env.bucketName;
  var folder = process.env.folder;

  var filename = getFileName();
  console.log("Filename:" + filename);

  var raw = JSON.stringify(event.body);
  console.log("raw after stringify:" + raw);

  var results = JSON.parse(raw);
  console.log("results:" + results);

  let firstname = results.firstName;
  console.log("firstName:" + firstname);

  let lastname = results.lastName;
  console.log("lastName:" + lastname);

  let message = results.Message;
  console.log("Message:" + message);

  var content = message + "," + firstname + "," + lastname;
  console.log("content:" + content);

  var keyName = getKeyName(folder, filename);
  var params = { Bucket: bucketName, Key: keyName, Body: content };

  s3.putObject(params, function (err, data) {
    if (err)
      console.log(err)
    else
      console.log("Successfully saved object to: " + bucketName + "/" + keyName);
  });

  function getKeyName(folder, filename) {
    return folder + '/' + filename;
  }

  function getFileName() {
    var _uuid = uuidv4();
    var _date = Date.now();

    return _uuid + "-" + _date;
  }

  function uuidv4() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
      var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
      return v.toString(16);
    });
  }


  var html = '<html><head><title>Prayer received result</title></head>' +
    '<body><h1>Your Prayer has been received!</h1></body></html>';

  //callback(null, res);   - use this when using proxy model
  callback(null, html);
};

标签: jsonlambda

解决方案


进行了以下更改。

//var raw = JSON.stringify(event.body); //console.log("stringify 后的 raw:" + raw);

var 结果 = JSON.parse(event.body); console.log("结果:" + 结果);

希望这对其他人有帮助。从这篇文章开始,我对 Lambda, JSON 比较陌生。


推荐阅读