@foal/core
Version:
Full-featured Node.js framework, with no complexity
49 lines (48 loc) • 1.83 kB
JavaScript
;
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;
}