【问题标题】:Getting undefined after parsing the data in node js解析节点js中的数据后获取未定义
【发布时间】:2023-03-23 08:40:01
【问题描述】:

我正在尝试将图像从 AWS lambda 函数上传到 S3。为此,我遵循了本教程 - link。我使用 API Gateway 创建了一个发布 API,并在 lambda 中编写了 nodejs 代码以将图像发布到 S3。但是我在尝试测试 API 时遇到了来自 API Gateway 的错误。

"errorType": "TypeError [ERR_INVALID_ARG_TYPE]",
"errorMessage": "The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type undefined",
"code": "ERR_INVALID_ARG_TYPE",
"stack": [
    "TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type undefined",
    "    at Function.from (buffer.js:207:11)",
    "    at Runtime.exports.handler (/var/task/index.js:17:32)",
    "    at Runtime.handleOnce (/var/runtime/Runtime.js:63:25)",
    "    at process._tickCallback (internal/process/next_tick.js:68:7)"

我的 lambda 代码如下所示:-

const AWS = require('aws-sdk');
//*/ get reference to S3 client 
var s3 = new AWS.S3();


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


     let encodedImage =JSON.parse(event.body).user_avatar;
     let decodedImage = Buffer.from(encodedImage, 'base64');
     var filePath = "avatars/" + event.queryStringParameters.username + ".jpg"
     var params = {
       "Body": decodedImage,
       "Bucket": "find-my-mate-hasangi",
       "Key": filePath  
    };
    s3.upload(params, function(err, data){
       if(err) {
           callback(err, null);
       } else {
           let response = {
        "statusCode": 200,
        "headers": {
            "my_header": "my_value"
        },
        "body": JSON.stringify(data),
        "isBase64Encoded": false
    };
           callback(null, response);
    }
    });

};

我在下面的行中遇到错误:-

 let decodedImage = Buffer.from(encodedImage, 'base64');

我正在从 API 网关传递以下正文:-

{
  "body": {
    "user_avatar": "asas"
  }
}
  • 更新:我在 cmets 的建议后尝试了一些调试
console.log( event.body);         // Output: { "body": { "user_avatar": "Hi There!" } }
console.log( JSON.parse(event.body)); // Output: { body: { user_avatar: 'Hi There' } } 
console.log( event.body.user_avatar);               // Output: undefined
console.log( JSON.parse(event.body).user_avatar);   // Output: undefined

代码是用 Node JS v6.10 编写的,在 lambda 中不再可用。所以我使用的是 Node JS v10.x。这可能是错误的原因吗?任何人都知道如何解决该错误。

【问题讨论】:

  • 尝试console.log event.body。它将帮助您了解身体的结构和类型
  • @dimagolovin 感谢您的回复。我尝试添加 console.log 并得到以下响应 { "body": { "user_avatar": "Hi There!" } }
  • user_avatar 真的在事件正文中吗?
  • 是的 user_avatar 在正文中。 console.log(JSON.parse(event.body).user_avatar) 正在返回“未定义”。
  • 试试让encodedImage = event.body.user_avatar

标签: node.js amazon-web-services amazon-s3 aws-lambda aws-api-gateway


【解决方案1】:

您传递的所有数据都保存在event.body 中。由于您传递的对象也是从 body 开始的,因此您应该像这样访问它:

JSON.parse(event.body).body.user_avatar

【讨论】:

  • 是的,你是对的。我没注意到。它现在起作用了。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
相关资源
最近更新 更多