くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

routing-controllersのカスタムエラーハンドラで404を扱う

最近はサーバサイドもTypeScriptにしていて、
routing-controllersがいい感じ。

Error Handlingをカスタムしてるけど、
どのパスにも当てはまらない場合にうまく処理されないので、いろいろ調べてみたときの備忘録。

解決方法

このIssueへの回答が参考になった(*´ω`*)

https://github.com/typestack/routing-controllers/issues/311#issuecomment-365431823

カスタムエラーハンドラを利用するために、defaultErrorHandler: falseを指定しているので、
マッチしない場合のmiddlewareを追加すればよいとのこと

import { Middleware, ExpressMiddlewareInterface } from 'routing-controllers';
import { NextFunction, Request, Response } from 'express';

import { NotFoundError } from '../errors/notfound.error';

@Middleware({ type: 'after' })
export class FinalMiddleware implements ExpressMiddlewareInterface {
  public use(req: Request, res: Response, next?: NextFunction): void {
    if(!res.headersSent) {
      res.status(404).send();
    }
    res.end();
  }
}
// ...
useExpressServer(app, {
  defaultErrorHandler: false,
  middlewares: [
    FinalMiddleware,
    CustomErrorHandlerMiddleware,
  ],
);
// ...

以上!! これでError Handlingのカスタマイズが捗る(*´ω`*)

参考にしたサイト様