When using a base path, the / route doesn't seem to run middleware properly.
I wrote a failing test case using CORS as an example to illustrate:
it('Middleware runs for root path when basepathed', async function() {
const testApi = require('../index')({
base: 'base-path'
})
testApi.use((req, res, next) => {
res.cors()
next()
})
testApi.use((err, req, res, next) => {
res.cors()
next()
})
testApi.get('/', async () => {
return { status: 'ok' }
})
let _event = Object.assign({},event,{ path: '/base-path/' }) // even got a trailing slash and everything :(
let result = await testApi.run(_event,{})
expect(result.multiValueHeaders).to.have.property('access-control-allow-origin')
})
The route itself runs and returns { status: 'ok' } but the CORS headers are missing. If the registered route is changed it works as expected:
// ...
testApi.get('/potato', async () => {
return { status: 'ok' }
})
let _event = Object.assign({},event,{ path: '/base-path/potato' })
// ... this works.
Interestingly, the error middleware runs fine regardless of the route. If you remove the route / and change the event path to something like '/base-path' you'll get a 404 (or 405, don't recall) but the CORS headers will be there
When using a base path, the
/route doesn't seem to run middleware properly.I wrote a failing test case using CORS as an example to illustrate:
The route itself runs and returns
{ status: 'ok' }but the CORS headers are missing. If the registered route is changed it works as expected:Interestingly, the error middleware runs fine regardless of the route. If you remove the route
/and change the event path to something like'/base-path'you'll get a 404 (or 405, don't recall) but the CORS headers will be there