จะแยกวิเคราะห์ body params บน AWS lambda ได้อย่างไร

ในฟังก์ชัน AWS lambda ของฉัน ฉันสามารถเข้าถึงเหตุการณ์ json ซึ่งเก็บพารามิเตอร์ชื่อ: body ปัญหาคือนี่คือสตริงเนื้อหาดิบ (ไม่ได้แยกวิเคราะห์เป็นพารามิเตอร์แต่ละตัว)

{
  input: {
    body: "------WebKitFormBoundarys3wLu6HlaCBrIExe\r\nContent-Disposition: form-data; name=\"foo\"\r\n\r\nbar\r\n------WebKitFormBoundarys3wLu6HlaCBrIExe\r\nContent-Disposition: form-data; name=\"media[]\"\r\n\r\nhthtth\r\n------WebKitFormBoundarys3wLu6HlaCBrIExe\r\nContent-Disposition: form-data; name=\"media[]\"\r\n\r\nlololol\r\n------WebKitFormBoundarys3wLu6HlaCBrIExe--\r\n"
  }
}

ฉันต้องการรับสิ่งนั้นและเปลี่ยนเป็น:

{
  foo: 'bar',
  media: [
    "grgkoerpkge",
    "twepgbopcib"
  ]
}

ฉันไม่ต้องการใช้เซิร์ฟเวอร์ด่วนที่ป่องเพื่อแยกวิเคราะห์สตริงเนื้อหา

ปล. ฉันได้ลองใช้ body-parser แต่ดูเหมือนว่าจะใช้งานได้กับ express เท่านั้น เป็นมิดเดิลแวร์


person CodeOverload    schedule 06.08.2017    source แหล่งที่มา
comment
ดูวิธีแก้ปัญหาได้ที่นี่   -  person sayan saha    schedule 01.11.2020


คำตอบ (3)


ส่งไปยังแลมบ์ดาของคุณในรูปแบบ JSON

จากนั้น ในแลมบ์ดาของคุณ (หากคุณใช้การรวม lambda-proxy) ให้แยกวิเคราะห์โดยใช้ JSON.parse(event.body)

person Noel Llevares    schedule 07.08.2017
comment
ฉันไม่สามารถควบคุมสิ่งที่ส่งมาให้ฉันได้ มันเป็นเว็บฮุคจากบริการ - person CodeOverload; 07.08.2017

คุณกำลังส่งพารามิเตอร์ตามแบบฟอร์มหรือด้วย "ประเภทเนื้อหา" ในส่วนหัว "application/x-www-form-urlencoded"

คุณต้องผ่านมันไปพร้อมกับ "application/json"

person Guerra    schedule 13.08.2017

พบปัญหาที่คล้ายกันเมื่อเร็ว ๆ นี้ เนื่องจากประเภทเนื้อหาในคำขอเป็นรูปแบบข้อความธรรมดา ฉันจึงใช้ querystring ซึ่งมีโมดูลในตัวในโหนด js เพื่อแยกวิเคราะห์สตริงเนื้อหา ข้อมูลเพิ่มเติมเกี่ยวกับสตริงการสืบค้น

const querystring = require('querystring');

และในตัวจัดการแลมบ์ดา

var jsonData = querystring.parse(event.body);
person dc7    schedule 11.06.2020
comment
ใช้งานได้เฉพาะเมื่อเนื้อหา Content-Type เป็น application/x-www-form-urlencoded แต่ใช้ไม่ได้กับ multipart/form-data - person sayan saha; 01.11.2020