lukeautry/tsoa

Why is my middleware not being hit?

dgreene1 opened this issue · 1 comments

I figured it out, but I'm sharing this for others who might discover this. See below for the answer.

Problem: my error middleware isn't being hit even though I have it set up in index.ts

// #######
// Registering the auto-generated routes from tsoa
const router = new KoaRouter();
RegisterRoutes(router);
app.use(router.routes()).use(router.allowedMethods());
// #######

app.use(bodyParser());
app.use(errorResponder);
app.use(errorLogger);
app.use(insertCorrelationId);
app.use(logRequest);
app.use(gzip());
app.use(cors());

Answer: Turns out that the order matters, especially for middleware that is catching errors.

Solution: If you have a middleware function with a try/catch inside of it, you'll want that to be inserted into your router (via app.use) before you insert the tsoa routes.

Like this:

app.use(bodyParser());
app.use(errorResponder);
app.use(errorLogger);
app.use(insertCorrelationId);
app.use(logRequest);
app.use(gzip());
app.use(cors());

// #######
// Registering the auto-generated routes from tsoa
const router = new KoaRouter();
RegisterRoutes(router);
app.use(router.routes()).use(router.allowedMethods());
// #######