Skip to content

Commit

Permalink
Merge pull request #1602 from VincentClair/fix/1598-error-handler-mid…
Browse files Browse the repository at this point in the history
…dleware

Await apiHandler to handle error in try/catch
WoH authored Mar 29, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
2 parents 3a0fd2a + 03efb05 commit 612b1c9
Showing 6 changed files with 20 additions and 8 deletions.
4 changes: 2 additions & 2 deletions packages/cli/src/routeGeneration/templates/express.hbs
Original file line number Diff line number Diff line change
@@ -79,7 +79,7 @@ export function RegisterRoutes(app: Router) {
...(fetchMiddlewares<RequestHandler>({{../name}})),
...(fetchMiddlewares<RequestHandler>({{../name}}.prototype.{{name}})),

{{#if ../../iocModule}}async {{/if}}function {{../name}}_{{name}}(request: ExRequest, response: ExResponse, next: any) {
async function {{../name}}_{{name}}(request: ExRequest, response: ExResponse, next: any) {
const args: Record<string, TsoaRoute.ParameterSchema> = {
{{#each parameters}}
{{@key}}: {{{json this}}},
@@ -103,7 +103,7 @@ export function RegisterRoutes(app: Router) {
const controller = new {{../name}}();
{{/if}}

templateService.apiHandler({
await templateService.apiHandler({
methodName: '{{name}}',
controller,
response,
Original file line number Diff line number Diff line change
@@ -31,10 +31,9 @@ type ExpressReturnHandlerParameters = {
export class ExpressTemplateService extends TemplateService<ExpressApiHandlerParameters, ExpressValidationArgsParameters, ExpressReturnHandlerParameters> {
async apiHandler(params: ExpressApiHandlerParameters) {
const { methodName, controller, response, validatedArgs, successStatus, next } = params;
const promise = this.buildPromise(methodName, controller, validatedArgs);

try {
const data = await Promise.resolve(promise);
const data = await this.buildPromise(methodName, controller, validatedArgs);
let statusCode = successStatus;
let headers;
if (this.isController(controller)) {
Original file line number Diff line number Diff line change
@@ -45,10 +45,9 @@ export class HapiTemplateService extends TemplateService<HapiApiHandlerParameter

async apiHandler(params: HapiApiHandlerParameters) {
const { methodName, controller, h, validatedArgs, successStatus } = params;
const promise = this.buildPromise(methodName, controller, validatedArgs);

try {
const data = await Promise.resolve(promise);
const data = await this.buildPromise(methodName, controller, validatedArgs);
let statusCode = successStatus;
let headers;

Original file line number Diff line number Diff line change
@@ -33,10 +33,9 @@ type KoaReturnHandlerParameters = {
export class KoaTemplateService extends TemplateService<KoaApiHandlerParameters, KoaValidationArgsParameters, KoaReturnHandlerParameters> {
async apiHandler(params: KoaApiHandlerParameters) {
const { methodName, controller, context, validatedArgs, successStatus } = params;
const promise = this.buildPromise(methodName, controller, validatedArgs);

try {
const data = await Promise.resolve(promise);
const data = await this.buildPromise(methodName, controller, validatedArgs);
let statusCode = successStatus;
let headers;

5 changes: 5 additions & 0 deletions tests/fixtures/inversify-cpg/managedController.ts
Original file line number Diff line number Diff line change
@@ -14,4 +14,9 @@ export class ManagedController {
public async getModel(): Promise<TestModel> {
return this.managedService.getModel();
}

@Get('ThrowsError')
public getThrowsError(): void {
throw new Error('error thrown');
}
}
10 changes: 10 additions & 0 deletions tests/integration/inversify-glob.spec.ts
Original file line number Diff line number Diff line change
@@ -22,6 +22,16 @@ describe('Inversify Express Server with ControllerPathGlob', () => {
});
});

it('can handle error', async () => {
return verifyGetRequest(
basePath + '/ManagedTest/ThrowsError?tsoa=abc123456',
(_err, res) => {
expect(res.text).to.equal('error thrown');
},
500,
);
});

function verifyGetRequest(path: string, verifyResponse: (err: any, res: request.Response) => any, expectedStatus?: number) {
return verifyRequest(verifyResponse, request => request.get(path), expectedStatus);
}

0 comments on commit 612b1c9

Please sign in to comment.