[NestJS] จัดการ Error ด้วย Exception-filter มาทำให้เกิด User-Friendly Response กันเถอะ [PATH2]

Image placeholder
แวะมาทักทายกันได้

หากว่า User เรียกผ่าน Browser ด้วย End-Point URL หนึ่งจะพบว่าหน้าจอไม่เกิดอะไรขึ้น ภายใต้จิตสำนึกของมนุษย์อะไรที่ช้า หรือ ค้างไปนานๆ เพียงแค่ 3 นาทีก็จะไม่รอ ปิดระบบหรือเลิกใช้ไปเลย นี้คือความน่ากลัวในฝั่ง Business ซึ่งจริงๆแล้วระบบไม่ได้ไม่ทำงาน แต่เกิดข้อผิดพลาดที่ไม่ได้แจ้งเตือนให้ใครทราบต่างหาก ดังนั้นสิ่งนี้จึงเป็นปัญหา มาทำให้เกิด User-Friendly Response กันเถอะ

 

หากใครยังจำได้ในเรื่อง Data Validation ที่เคยเขียนบทความไปก่อนหน้านี้ ซึ่งเป็นการป้องกันข้อมูลที่ไม่ถูกต้อง ที่ได้รับมาจากภายนอกระบบ ซึ่ง Exception ก็เป็นการส่งข้อมูลออกจากระบบไปให้ User ที่ได้รับได้เข้าใจระบบ และ เกิด User Friendly เช่นเดียวกัน

 

อ่าน PATH1 ก่อนนะ 

[NestJS] จัดการ Error ด้วย Exception-filter มาทำให้เกิด User-Friendly Response กันเถอะ [PATH1]

https://www.sklsongkiat.com/articles/detail/nestjs-error-exception-filter-user-friendly-response-path1

 

Exception Filters

                  ในขณะที่การทำ Throwing ต่างๆ ที่ผ่านมาสามารถรองรับในหลายๆ กรณีในการทำ Exception แล้วก็ตาม ในบางกรณีคุณอาจจะต้องการควบคุมหรือสร้างให้เป็น Exception Layer ให้เป็นระบบมากขึ้น อย่างเช่น ทำระบบ Loggin ที่มี Schema JSON ที่แตกต่างๆ เพราะการ Throwing ที่ผ่านๆมาจะได้รับ Schema ที่ Build-in ทำให้ Customize ได้น้อยกว่า ซึ่ง Exception Filter เกิดมาเพื่อสิ่งนั้น เมื่อใช้ Exception Filter แล้วจะสามารถควบคุมการส่ง Response ไปยัง Client ได้ดีขึ้น

 

สร้างไฟล์ขึ้น ชื่อว่า exceptionfilter.exception.ts

 

@Catch()

export class AllExceptionsFilter implements ExceptionFilter {

    catch(exception: unknown, host: ArgumentsHost) {

        const ctx = host.switchToHttp();

        const response = ctx.getResponse();

        const request = ctx.getRequest();

 

        const status =

            exception instanceof HttpException

                ? exception.getStatus()

                : HttpStatus.INTERNAL_SERVER_ERROR;

 

        response.status(status).json({

            message_code: status,

            message: "This is message of status not found from json object",

            timestamp: new Date().toISOString(),

        });

    }

}

 

ใน Block ของ Json ด้านล่างจะเป็น Parameter ทั้งหมดที่จะไปแสดง เมื่อเกิด Error แล้วเข้า Throwing

 

Binding Filter

 

    @Post()

    @UseFilters(new ExceptionsFilter())

    async create(@Body() createCatDto: CreateCatDto) {

        throw new ForbiddenException();

    }

 

หลังจากที่สร้างไฟล์ exceptionfilter.exception.ts เสร็จก็นำ Class ที่สร้างขึ้นมาทำ Binding 

ข้อสำคัญเรียกใช้ที่ Module ไหน อย่าลืมไป Import ลง Providers ด้วยเพื่อใช้งาน

 

import { Module } from '@nestjs/common';

import { APP_FILTER } from '@nestjs/core';

 

@Module({

    providers: [

        {

            provide: APP_FILTER,

            useClass: ExceptionFilter,

        },

    ],

})

export class AppModule { }

 

 

มาดูผลลัพท์ หลังจากที่สร้าง Exception Filter

 



สรุป 


ระบบที่ดีจะต้องมีการจัดการทั้งข้อมูลเข้าและข้อมูลออกจากระบบ อย่าจัดการทั้ง Pipe DataValidation ข้อมูลเข้าระบบ ว่าส่งมาอย่างถูกต้องหรือไม่ และ ข้อมูลออกว่ามีการแจ้งเตือนให้ Client รู้หรือไม่ว่าเกิดปัญหาอะไร เพื่อที่ Front-End จะนำไปจัดการ การแสดงผลได้อย่างถูกต้อง


click google ads สัก 1-2 click เพื่อเป็นกำลังใจ ให้ผู้เขียนด้วยนะครับ

 

REF:

https://docs.nestjs.com/exception-filters

https://developer.mozilla.org/en-US/docs/Web/HTTP/Status

 

แวะมาทักทายกันได้
donate

Categories: Tutorial Tags: #nestjs , #programing , 1583