一般開發(fā)過程中不不會根據(jù)httpcode來判斷接口請求成功與失敗的,而是會根據(jù)請求返回的數(shù)據(jù),里面加上code字段
一、返回的數(shù)據(jù)格式對比
1、直接返回的數(shù)據(jù)格式
1
2
3
4
5
6
7
8
9
|
{ "id" : 1, "uuid" : "cbbe7abc-b95e-48a0-8d24-b1ac93c45328" , "name" : "哈士奇1" , "age" : 12, "color" : null , "createAt" : "2019-07-25T09:13:30.000Z" , "updateAt" : "2019-07-25T09:13:30.000Z" } |
2、我們自己包裝后的返回數(shù)據(jù)
1
2
3
4
5
6
7
8
9
10
11
12
13
|
{ code: 0, message: "請求成功" , data: { "id" : 1, "uuid" : "cbbe7abc-b95e-48a0-8d24-b1ac93c45328" , "name" : "哈士奇1" , "age" : 12, "color" : null , "createAt" : "2019-07-25T09:13:30.000Z" , "updateAt" : "2019-07-25T09:13:30.000Z" } } |
二、攔截全部的錯誤請求,統(tǒng)一返回格式
1、使用命令創(chuàng)建一個過濾器
1
|
nest g f filters/httpException |
2、過濾器的代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
import { ArgumentsHost, Catch, ExceptionFilter, HttpException, HttpStatus, Logger, } from '@nestjs/common' ; @Catch(HttpException) export class HttpExceptionFilter implements ExceptionFilter { catch (exception: HttpException, host: ArgumentsHost) { const ctx = host.switchToHttp(); const response = ctx.getResponse(); const request = ctx.getRequest(); const message = exception.message.message; Logger.log( '錯誤提示' , message); const errorResponse = { data: { error: message, }, // 獲取全部的錯誤信息 message: '請求失敗' , code: 1, // 自定義code url: request.originalUrl, // 錯誤的url地址 }; const status = exception instanceof HttpException ? exception.getStatus() : HttpStatus.INTERNAL_SERVER_ERROR; // 設置返回的狀態(tài)碼、請求頭、發(fā)送錯誤信息 response.status(status); response.header( 'Content-Type' , 'application/json; charset=utf-8' ); response.send(errorResponse); } } |
3、在main.ts中全局注冊
1
2
3
4
5
6
7
8
9
|
... import { HttpExceptionFilter } from './filters/http-exception.filter' ; async function bootstrap() { ... // 全局注冊錯誤的過濾器 app.useGlobalFilters( new HttpExceptionFilter()); } bootstrap(); |
4、測試,返回的錯誤信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
{ "statusCode" : 400, "error" : "Bad Request" , "data" : { "message" : [ { "age" : "必須的整數(shù)" } ] }, "message" : '請求失敗' , "code" : 1, "url" : "/api/v1/cat" } |
三、統(tǒng)一請求成功的返回數(shù)據(jù)
1、創(chuàng)建一個攔截器src/interceptor/transform.interceptor.ts
2、攔截器的代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
import { Injectable, NestInterceptor, CallHandler, ExecutionContext, } from '@nestjs/common' ; import { map } from 'rxjs/operators' ; import { Observable } from 'rxjs' ; interface Response<T> { data: T; } @Injectable() export class TransformInterceptor<T> implements NestInterceptor<T, Response<T>> { intercept( context: ExecutionContext, next: CallHandler<T>, ): Observable<Response<T>> { return next.handle().pipe( map(data => { return { data, code: 0, message: '請求成功' , }; }), ); } } |
3、全局注冊
1
2
3
4
5
6
7
8
9
10
|
... import { TransformInterceptor } from './interceptor/transform.interceptor' ; async function bootstrap() { ... // 全局注冊攔截器 app.useGlobalInterceptors( new TransformInterceptor()); ... } bootstrap(); |
4、測試返回數(shù)據(jù)
1
2
3
4
5
6
7
8
9
10
11
12
13
|
{ "data" : { "id" : 1, "uuid" : "cbbe7abc-b95e-48a0-8d24-b1ac93c45328" , "name" : "哈士奇1" , "age" : 12, "color" : null , "createAt" : "2019-07-25T09:13:30.000Z" , "updateAt" : "2019-07-25T09:13:30.000Z" }, "code" : 0, "message" : "請求成功" } |
到此這篇關于nestjs返回給前端數(shù)據(jù)格式的封裝實現(xiàn)的文章就介紹到這了,更多相關nestjs返回給前端數(shù)據(jù)格式內(nèi)容請搜索服務器之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/kuangshp128/article/details/97240664