UNPKG

@foal/core

Version:

Full-featured Node.js framework, with no complexity

49 lines (48 loc) 1.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getResponse = getResponse; const logging_1 = require("../logging"); const http_1 = require("../http"); const convert_error_to_response_1 = require("./convert-error-to-response"); async function getResponse(route, ctx, services, appController) { const logger = services.get(logging_1.Logger); let response; const hookPostFunctions = []; for (const hook of route.hooks) { let result; try { result = await hook(ctx, services); } catch (error) { result = await (0, convert_error_to_response_1.convertErrorToResponse)(error, ctx, appController, logger); } if ((0, http_1.isHttpResponse)(result)) { response = result; break; } else if (typeof result === 'function') { hookPostFunctions.unshift(result); } } if (!(0, http_1.isHttpResponse)(response)) { try { response = await route.controller[route.propertyKey](ctx, ctx.request); } catch (error) { response = await (0, convert_error_to_response_1.convertErrorToResponse)(error, ctx, appController, logger); } } if (!(0, http_1.isHttpResponse)(response)) { const error = new Error(`The controller method "${route.propertyKey}" should return an HttpResponse.`); response = await (0, convert_error_to_response_1.convertErrorToResponse)(error, ctx, appController, logger); } for (const postFn of hookPostFunctions) { try { await postFn(response); } catch (error) { response = await (0, convert_error_to_response_1.convertErrorToResponse)(error, ctx, appController, logger); } } return response; }