diff --git a/packages/express-wrapper/src/request.ts b/packages/express-wrapper/src/request.ts index 61b93b8d..c311a0f5 100644 --- a/packages/express-wrapper/src/request.ts +++ b/packages/express-wrapper/src/request.ts @@ -45,7 +45,7 @@ export const decodeRequestAndEncodeResponse = ( ): express.RequestHandler => { return createNamedFunction( 'decodeRequestAndEncodeResponse' + httpRoute.method + apiName, - async (req, res) => { + async (req, res, next) => { const maybeRequest = httpRoute.request.decode(req); if (maybeRequest._tag === 'Left') { console.log('Request failed to decode'); @@ -63,10 +63,12 @@ export const decodeRequestAndEncodeResponse = ( } catch (err) { console.warn('Error in route handler:', err); res.status(500).end(); + next(); return; } - responseEncoder(httpRoute, rawResponse, res); + const expressHandler = responseEncoder(httpRoute, rawResponse); + expressHandler(req, res, next); }, ); }; diff --git a/packages/express-wrapper/src/response.ts b/packages/express-wrapper/src/response.ts index 504f1648..03efe2c1 100644 --- a/packages/express-wrapper/src/response.ts +++ b/packages/express-wrapper/src/response.ts @@ -22,28 +22,24 @@ export type NumericOrKeyedResponseType = export type ResponseEncoder = ( route: HttpRoute, serviceFnResponse: NumericOrKeyedResponseType, - expressRes: express.Response, -) => void; +) => express.RequestHandler; -export const defaultResponseEncoder: ResponseEncoder = ( - route, - serviceFnResponse, - expressRes, -) => { - const { type, payload } = serviceFnResponse; - const status = typeof type === 'number' ? type : (KeyToHttpStatus as any)[type]; - if (status === undefined) { - console.warn('Unknown status code returned'); - expressRes.status(500).end(); - return; - } - const responseCodec = route.response[status]; - try { - expressRes.status(status).json(responseCodec!.encode(payload)).end(); - } catch { - console.warn( - "Unable to encode route's return value, did you return the expected type?", - ); - expressRes.status(500).end(); - } -}; +export const defaultResponseEncoder: ResponseEncoder = + (route, serviceFnResponse) => (_req, res) => { + const { type, payload } = serviceFnResponse; + const status = typeof type === 'number' ? type : (KeyToHttpStatus as any)[type]; + if (status === undefined) { + console.warn('Unknown status code returned'); + res.status(500).end(); + return; + } + const responseCodec = route.response[status]; + try { + res.status(status).json(responseCodec!.encode(payload)).end(); + } catch { + console.warn( + "Unable to encode route's return value, did you return the expected type?", + ); + res.status(500).end(); + } + };