iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0
自我挑戰組

初探後端世界-使用Node.js框架開發網頁系列 第 6

你需要知道的9個元件功能介紹 -5(Exception & Exception filter)

  • 分享至 

  • xImage
  •  

本篇學習筆記來不及趕完,只好先上傳之後再改了......


Exception filter

Exception

  • 標準(Standard)Exception:

import { Controller, Get, HttpException, HttpStatus } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    throw new HttpException('發生錯誤!',HttpStatus.BAD_REQUEST)
    return this.appService.getHello();
  }
}

Api測試結果:
https://ithelp.ithome.com.tw/upload/images/20230921/20163253bPSA1W4n6D.png

  • 自訂(Custom)Exception:

自定義回傳格式:

import { Controller, Get, HttpException, HttpStatus } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    const obj={
      code:HttpStatus.BAD_REQUEST,
      message:'發生錯誤!'
    }
    throw new HttpException(obj,HttpStatus.BAD_REQUEST)
    return this.appService.getHello();
  }
}

api測試結果:
https://ithelp.ithome.com.tw/upload/images/20230921/20163253WJfY2zdVBE.png

  • 內建(Built-in)Http Exception:

內建回傳格式:

import { BadRequestException, Controller, Get, HttpException, HttpStatus } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    throw new BadRequestException('發生錯誤!');
    return this.appService.getHello();
  }
}

api測試結果:
https://ithelp.ithome.com.tw/upload/images/20230921/20163253mMWr9fZtNN.png

自訂Exception filter

import { ArgumentsHost, Catch, ExceptionFilter, HttpException } from '@nestjs/common';

@Catch(HttpException)
export class HttpFilter<T extends HttpException> implements ExceptionFilter<T> {
  catch(exception: T, host: ArgumentsHost) {}
}

解釋說明:

  1. 使用catch( )方法,裡面有兩個變數,exception和host.第一個T代表被捕捉到exception,因為無法確認是什麼類型,所以是這個T是泛型

ArguementsHost

ArguementsHost是一個helper class,我們可以透過它來獲得一些跟該請求相關的參數,比如request、response物件等等的,再來也可以為不同的底層參數做封裝.
關於host可使用的方法,官網有特別寫在這邊https://docs.nestjs.com/fundamentals/execution-context#execution-context


上一篇
你需要知道的9個元件功能介紹 -4(Middleware)
下一篇
你需要知道的9個元件功能介紹 -6(Pipe)
系列文
初探後端世界-使用Node.js框架開發網頁12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言