Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Route path routes to null when rawPath is empty from API Gateway #612

Open
kueckermann opened this issue Dec 29, 2022 · 0 comments
Open

Comments

@kueckermann
Copy link

kueckermann commented Dec 29, 2022

When using API Gateway (v2 payload) with a custom domain and base path mapping, for example api.example.com/v1, where api.example.com is the custom domain and v1 is the base path, API Gateway will route the request to the lambda regardless of a trailing forward slash. For example api.example.com/v1 or api.example.com/v1/ will route to the lambda.

The issue with this is that when the trailing forward slash is missing, the lambda payload will contain a raw path that is empty:

{
  version: '2.0',
  routeKey: '$default',
  rawPath: '',
  rawQueryString: ''
  ...
}

When using an express app with the serverless-express library, this results in a 404 response from the express app and a body containing the text Cannot GET null.

I'm not sure if this is an issue with express or serverless-express, but a workaround could be to place a default value in function getRequestValuesFromApiGatewayEvent({ event }) to prevent this from happening. For example, line 13 of event-sources/aws/api-gateway-v2.js could be changed from:

  const requestPathOrRawPath = requestPath || rawPath

to:

  const requestPathOrRawPath = requestPath || rawPath || '/'

It sees most logical that both api.example.com/v1 or api.example.com/v1/ route to the same location. In my case I have a health check route at '/':

app.all('/', (req: Request, res: Response) => {
  res.send({
    // Health check stats
  })
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant