nestjs返回给前端数据格式的封装实现
一般开发过程中不不会根据httpcode来判断接口请求成功与失败的,而是会根据请求返回的数据,里面加上code字段
一、返回的数据格式对比
1、直接返回的数据格式
{
"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、我们自己包装后的返回数据
{
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"
}
}
二、拦截全部的错误请求,统一返回格式
1、使用命令创建一个过滤器
nestgffilters/httpException
2、过滤器的代码
import{
ArgumentsHost,
Catch,
ExceptionFilter,
HttpException,
HttpStatus,
Logger,
}from'@nestjs/common';
@Catch(HttpException)
exportclassHttpExceptionFilterimplementsExceptionFilter{
catch(exception:HttpException,host:ArgumentsHost){
constctx=host.switchToHttp();
constresponse=ctx.getResponse();
constrequest=ctx.getRequest();
constmessage=exception.message.message;
Logger.log('错误提示',message);
consterrorResponse={
data:{
error:message,
},//获取全部的错误信息
message:'请求失败',
code:1,//自定义code
url:request.originalUrl,//错误的url地址
};
conststatus=
exceptioninstanceofHttpException
?exception.getStatus()
:HttpStatus.INTERNAL_SERVER_ERROR;
//设置返回的状态码、请求头、发送错误信息
response.status(status);
response.header('Content-Type','application/json;charset=utf-8');
response.send(errorResponse);
}
}
3、在main.ts中全局注册
...
import{HttpExceptionFilter}from'./filters/http-exception.filter';
asyncfunctionbootstrap(){
...
//全局注册错误的过滤器
app.useGlobalFilters(newHttpExceptionFilter());
}
bootstrap();
4、测试,返回的错误信息
{
"statusCode":400,
"error":"BadRequest",
"data":{
"message":[
{
"age":"必须的整数"
}
]
},
"message":'请求失败',
"code":1,
"url":"/api/v1/cat"
}
三、统一请求成功的返回数据
1、创建一个拦截器src/interceptor/transform.interceptor.ts
2、拦截器的代码
import{
Injectable,
NestInterceptor,
CallHandler,
ExecutionContext,
}from'@nestjs/common';
import{map}from'rxjs/operators';
import{Observable}from'rxjs';
interfaceResponse{
data:T;
}
@Injectable()
exportclassTransformInterceptor
implementsNestInterceptor>{
intercept(
context:ExecutionContext,
next:CallHandler,
):Observable>{
returnnext.handle().pipe(
map(data=>{
return{
data,
code:0,
message:'请求成功',
};
}),
);
}
}
3、全局注册
...
import{TransformInterceptor}from'./interceptor/transform.interceptor';
asyncfunctionbootstrap(){
...
//全局注册拦截器
app.useGlobalInterceptors(newTransformInterceptor());
...
}
bootstrap();
4、测试返回数据
{
"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返回给前端数据格式的封装实现的文章就介绍到这了,更多相关nestjs返回给前端数据格式内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。