-
Notifications
You must be signed in to change notification settings - Fork 676
Open
Description
The AWS API Gateway console allows you to navigate to your resource, choose "Test" and send a test request to your Lambda. When I tried this, the Lambda was throwing an error:
TypeError: Cannot read property 'if-modified-since' of null
Yet the API worked fine when accessed from a browser.
Turning up the logging, I saw this in the logs:
DEBUG {
message: 'SERVERLESS_EXPRESS:PROXY',
event: '{\n' +
" resource: '/api/{resource+}',\n" +
" path: '/api/test',\n" +
" httpMethod: 'GET',\n" +
' headers: null,\n' +
Yes, it looks like headers is null.
There are two workarounds:
- In the method execution form, define any random header in the Headers field.
- Wrap the
serverlessExpressfunction to provide a default value forheaders:
exports.handler = function handler(event, context, callback) {
return serverlessExpress({
app
})(
{
...event,
headers: event.headers || []
},
context,
callback
)
}
I know this is not a real-world issue, but I still wasted a fair amount of time trying to get to the bottom of it! I'm pretty sure I'm not doing anything odd in my code or deployment.
index.js
import express from 'express'
const app = express()
const router = express.Router()
router.get('/api/test', (req, res) => {
res.json({ message: 'Hello World!' })
})
app.use('/', router)
export default app
CDK
const backend = new Function(this, 'backend', {
functionName: 'test',
runtime: Runtime.NODEJS_14_X,
environment: {
AWS_NODEJS_CONNECTION_REUSE_ENABLED: '1'
},
handler: 'main.handler',
code: Code.fromAsset(path.join(path.dirname(require.resolve('test')), 'build'))
})
api.root.addResource('api').addResource('{resource+}').addMethod('ANY', new LambdaIntegration(backend))
package.json
"dependencies": {
"@vendia/serverless-express": "^4.3.7",
"express": "^4.17.1"
}
Metadata
Metadata
Assignees
Labels
No labels