Open mattiasnixell opened 2 years ago
Oh no, are they actually going to release express v5? The best thing about Express is how it never changes and code that integrates with it never has to be updated :)
@mattiasnixell Can you send your Request headers? I guess that you headers that you headers is missing Content-Type
attribute.
Another information, the Lambda Function expect receive headers and multiValueHeaders, so you can factory this using event.multiValueHeaders = event.headers
. Will be resolved, I expect.
Hello! It seems like express v5 and its bundled body-parser v2 do not work with serverless-express. The body-parser dependency has changed its internals to use "on-finished" dependency to check if the body is parsed already. It does so by checking if the request stream has "completed" set to true. The requests from serverless-express are always "completed" when it reaches the express app, i.e. the body-parser thinks the body is already parsed and skips parsing e.g. JSON content.
Code that always sets request to completed: https://github.com/vendia/serverless-express/blob/f3f9c50f6dfcdbaf84af6ca64e77af1ba8b34bf0/src/request.js#L20
The "on-finished" code that checks if the request body is already parsed: https://github.com/jshttp/on-finished/blob/1111fe8e913debaf3da9bd4f6bda216ef36097fa/index.js#L76
Here's the change in body-parser which start using the "on-finished": https://github.com/expressjs/body-parser/compare/1.20.0...v2.0.0-beta.1#diff-c0749b151a7ec0288a6a4c849ff5215ec9ddeef8fa799a5cecef4b320a7dcf00R100
Here's example code:
Calling POST /example prints a "Buffer" object. If you enable debugging for body-parser (set env flag DEBUG=body-parser:*), then it prints out "body-parser:json body already parsed".
How can this be solved? I am afraid that if the request has "completed" to false, it might have unexpected consequences as well.