20201014(42Sof Error Class)


1.学習時間全体


午前9時30分から午後4時まで(食事時間も含む)

2.学習目標


42StackOverFLow

3.学習方法


夏仁浩とディスコ

4.次の学習目標


5.学習内容の詳細


コード冗長性を最小化するためのエラークラスの作成
作成
  • Error Class
  • class HttpException extends Error {
      status: number;
      message: string;
      constructor(status: number, message: string) {
        super(message);
        this.status = status;
        this.message = message;
      }
    }
     
    export default HttpException;
  • Errorエラー処理ミドルウェア
  • import { NextFunction, Request, Response } from 'express';
    import HttpException from '../exceptions/HttpException';
     
    function errorMiddleware(error: HttpException, request: Request, response: Response, next: NextFunction) {
      const status = error.status || 500;
      const message = error.message || 'Something went wrong';
      response
        .status(status)
        .send({
          status,
          message,
        })
    }
     
    export default errorMiddleware;
  • index.ts
    なぜerrorMiddlewareを最下層に配置したのか
    Expressは、すべてのミドルウェア関数およびルーティングが実行されたが、いずれにも応答していないことを示すため、
  • ~~
    app.use(cors(corsOptions));
    app.use("/auth", authRouter);
    app.use("/posts", postRouter);
    app.use("/users", userRouter);
    app.use("/pages", pageRouter);
    app.use(errorMiddleware);
    
    ~~
  • Contoller(サンプルコード)
  • 文字列「route」を含まないnext()関数を使用してコンテンツを渡すと、Expressは現在のリクエストにエラーがあると判断し、エラー処理に関係のない残りのルーティングおよびミドルウェア関数をスキップします.
    const createAnswerLike = async (req: DecodedRequest, res: Response, next: NextFunction) => {
    	const { answerId, isLike, answerUserId } = req.body;
    	const userId: number = req.decodedId;
    	const likeService: LikeService = new LikeService();
    
    	try {
    		await likeService.createAnswerLike({ userId, answerId, isLike, answerUserId });
    		return res.status(200).json({
    			result: true,
    			message: "create Success",
    		})
    	} catch (error) {
    		console.log(error);
    	   next(new HttpException(404, 'Answer not found'));
    	}
    }
    https://wanago.io/2018/12/17/typescript-express-error-handling-validation/