简体   繁体   中英

AWS Lambda event.body parsing error in production

I am using https://github.com/ARautio/aws-lambda-pdf-generator-puppeteer to create pdfs serverlessly. I have made some changes to get html to process as POST data.

I ran command: yarn deploy:prod to deploy it on aws lambda.

After deploying, when i tried to hit the server, it gave me 500 error.

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.

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 .

If you decode your payload (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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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