简体   繁体   English

生产中的 AWS Lambda event.body 解析错误

[英]AWS Lambda event.body parsing error in production

I am using https://github.com/ARautio/aws-lambda-pdf-generator-puppeteer to create pdfs serverlessly.我正在使用https://github.com/ARautio/aws-lambda-pdf-generator-puppeteer无服务器地创建 pdf。 I have made some changes to get html to process as POST data.我进行了一些更改以使 html 作为 POST 数据进行处理。

I ran command: yarn deploy:prod to deploy it on aws lambda.我运行命令: yarn deploy:prod将其部署在 aws lambda 上。

After deploying, when i tried to hit the server, it gave me 500 error.部署后,当我尝试访问服务器时,它给了我 500 错误。

Code:代码:

  console.log("Data", event.body)
  const { apiKey = '', html = '', pageConfig = {}, name, customPageConfig = false } = JSON.parse(event.body)

On local, it's working fine, but when I deploy it, it is showing me error:在本地,它工作正常,但是当我部署它时,它显示错误:

Data eyJhcGlLZXkiOiAiYXNkc2FkYXNkZWVycnJycnIiLCAiaHRtbCI6ICJcbjxodG1sPjxoZWFkPjxzdHlsZT5cbiAgIC5wYWdlIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGFsd2F5cztcbiAgICB9XG5cblxuICAgIEBwYWdlIHtcbiAgICAgIFxuICAgICAgQHRvcC1sZWZ0IHtcbiAgICAgICAgY29udGVudDogZWxlbWVudChoZWFkZXJSdW5uaW5nKTtcbiAgICAgIH1cblxuICAgICAgQGJvdHRvbS1sZWZ0IHtcbiAgICAgICAgY29udGVudDogZWxlbWVudChmb290ZXJSdW5uaW5nKTtcbiAgICAgIH1cblxuICAgIH1cbiAgIFxuICBcbiAgIFxuICBcbiAgIFxuICAuYmlzaHVMaW5lIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cbiAgIFxuICBcbiAgIFxuICAgIC5oZWFkZXIge1xuICAgICAgcG9zaXRpb246IHJ1bm5pbmcoaGVhZGVyUnVubmluZyk7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIFxuICAgXG4gICAgLmNvbmRpdGlvbmFsIHtcbiAgICAgICAgZGlzcGxheSA6IGlubGluZS1ibG9jaztcbiAgICB9XG5cbiAgIFxuICBcbiAgIFxuICAuaW5zZXJ0ZWQtaW1hZ2V7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICB9XG4gICBcblxuICAgIC5mb290ZXIge1xuICAgICAgcG9zaXRpb246IHJ1bm5pbmcoZm9vdGVyUnVubmluZyk7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgXG4gICAgICAgICAgICAucGFnZWYxM2ExY2E4OTA2NTRhYzY5MTg1NDM3YTgzNWIxMWM0eyAgXG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogMTBpbjtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlIGF1dG87IFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdDtcbiAgICAgICAgICAgIFxuICAgICAgICAgIH1cbiAgICAgICAgPC9zdHlsZT48L2hlYWQ==

Logs from production server:来自生产服务器的日志:

2020-07-06T10:28:03.350Z    d1c38673-19f0-47ef-a748-cf8912e9cc82    INFO    
03:58:03 pm
2020-07-06T10:28:03.352Z    d1c38673-19f0-47ef-a748-cf8912e9cc82    ERROR   SyntaxError: Unexpected token e in JSON at position 0
    at JSON.parse (<anonymous>)
    at module.exports.pdf (/var/task/pdf.js:17:92)
    at Runtime.handler (/var/task/serverless_sdk/index.js:9:131855)
    at Runtime.handleOnce (/var/runtime/Runtime.js:66:25)
03:58:03 pm
2020-07-06T10:28:03.410Z    d1c38673-19f0-47ef-a748-cf8912e9cc82    ERROR   Invoke Error    {
    "errorType": "SyntaxError",
    "errorMessage": "Unexpected token e in JSON at position 0",
    "stack": [
        "SyntaxError: Unexpected token e in JSON at position 0",
        "    at JSON.parse (<anonymous>)",
        "    at module.exports.pdf (/var/task/pdf.js:17:92)",
        "    at Runtime.handler (/var/task/serverless_sdk/index.js:9:131855)",
        "    at Runtime.handleOnce (/var/runtime/Runtime.js:66:25)"
    ]
}
03:58:03 pm

I am sending:我正在发送:

 {
   "apiKey": "asd",
   "html": "<h1>Hello</h1>",
   "pageConfig": {
      "size": "A4"
    }
 }

The payload you are parsing is base64 encoded.您正在解析的有效负载是base64编码的。

Looks like you would need to decode it first before you can access it.看起来您需要先对其进行解码才能访问它。

Ideally you should use base 64 encoded content in both environments, however if you want to control logic based on environment then use Lambda Environment Variables .理想情况下,您应该在两种环境中使用 base 64 编码内容,但是如果您想根据环境控制逻辑,请使用Lambda Environment Variables

If you decode your payload (base64):如果您解码您的有效负载(base64):

base64 -d <<< eyJhcGlLZXkiOiAiYXNkc2FkYXNkZWVycnJycnIiLCAiaHRtbCI6ICJcbjxodG1sPjxoZWFkPjxzdHlsZT5cbiAgIC5wYWdlIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGFsd2F5cztcbiAgICB9XG5cblxuICAgIEBwYWdlIHtcbiAgICAgIFxuICAgICAgQHRvcC1sZWZ0IHtcbiAgICAgICAgY29udGVudDogZWxlbWVudChoZWFkZXJSdW5uaW5nKTtcbiAgICAgIH1cblxuICAgICAgQGJvdHRvbS1sZWZ0IHtcbiAgICAgICAgY29udGVudDogZWxlbWVudChmb290ZXJSdW5uaW5nKTtcbiAgICAgIH1cblxuICAgIH1cbiAgIFxuICBcbiAgIFxuICBcbiAgIFxuICAuYmlzaHVMaW5lIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cbiAgIFxuICBcbiAgIFxuICAgIC5oZWFkZXIge1xuICAgICAgcG9zaXRpb246IHJ1bm5pbmcoaGVhZGVyUnVubmluZyk7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIFxuICAgXG4gICAgLmNvbmRpdGlvbmFsIHtcbiAgICAgICAgZGlzcGxheSA6IGlubGluZS1ibG9jaztcbiAgICB9XG5cbiAgIFxuICBcbiAgIFxuICAuaW5zZXJ0ZWQtaW1hZ2V7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICB9XG4gICBcblxuICAgIC5mb290ZXIge1xuICAgICAgcG9zaXRpb246IHJ1bm5pbmcoZm9vdGVyUnVubmluZyk7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgXG4gICAgICAgICAgICAucGFnZWYxM2ExY2E4OTA2NTRhYzY5MTg1NDM3YTgzNWIxMWM0eyAgXG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogMTBpbjtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlIGF1dG87IFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdDtcbiAgICAgICAgICAgIFxuICAgICAgICAgIH1cbiAgICAgICAgPC9zdHlsZT48L2hlYWQ==

you will get:你会得到:

{"apiKey": "asdsadasdeerrrrrr", "html": "\n<html><head><style>\n   .page {\n      position: relative;\n      page-break-after: always;\n    }\n\n\n    @page {\n      \n      @top-left {\n        content: element(headerRunning);\n      }\n\n      @bottom-left {\n        content: element(footerRunning);\n      }\n\n    }\n   \n  \n   \n  \n   \n  .bishuLine {\n    margin: 0;\n  }\n   \n  \n   \n    .header {\n      position: running(headerRunning);\n      width: 100%;\n    }\n  \n   \n    .conditional {\n        display : inline-block;\n    }\n\n   \n  \n   \n  .inserted-image{\n    display: inline-block;\n    max-width: 100%;\n    max-height: 100%;\n  }\n   \n\n    .footer {\n      position: running(footerRunning);\n      width: 100%;\n    }\n\n  \n            .pagef13a1ca890654ac69185437a835b11c4{  \n                min-height: 10in;\n                position: relative;\n                background-size: 100% auto; \n                background-image: none;\n                background-repeat: repeat;\n            \n          }\n        </style></headbase64: invalid input

So probably have to look at decoding it to use it in your function.所以可能需要考虑解码它以在你的 function 中使用它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM