diff --git a/src/server/ExpressHttpServer.ts b/src/server/ExpressHttpServer.ts index 7c6433d87..3658ddf51 100644 --- a/src/server/ExpressHttpServer.ts +++ b/src/server/ExpressHttpServer.ts @@ -20,13 +20,15 @@ export class ExpressHttpServer { methods: [ 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE' ], })); - app.use(async(request, response): Promise => { + app.use(async(request, response, done): Promise => { try { await this.handler.handleSafe({ request, response }); } catch (error) { const errMsg = `${error.name}: ${error.message}\n${error.stack}`; process.stderr.write(errMsg); response.status(500).contentType('text/plain').send(errMsg); + } finally { + done(); } }); return app.listen(port); diff --git a/test/unit/server/ExpressHttpServer.test.ts b/test/unit/server/ExpressHttpServer.test.ts index ee10f6fa5..eeb0ed78b 100644 --- a/test/unit/server/ExpressHttpServer.test.ts +++ b/test/unit/server/ExpressHttpServer.test.ts @@ -77,6 +77,13 @@ describe('ExpressHttpServer', (): void => { }); }); + it('returns a 404 when the handler does not do anything.', async(): Promise => { + handler.handle = async(input): Promise => { + expect(input).toBeDefined(); + }; + await request(server).get('/').expect(404); + }); + it('catches errors thrown by its handler.', async(): Promise => { handler.handle = async(): Promise => { throw new Error('dummyError');