nestjs返回给前端数据格式的封装实现
导读:收集整理的这篇文章主要介绍了nestjs返回给前端数据格式的封装实现,觉得挺不错的,现在分享给大家,也给大家做个参考。 一般开发过程中不不会根据httpcode来判断接口请求成功与失败的...
收集整理的这篇文章主要介绍了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、使用命令创建一个过滤器
nest g f filters/httPException
2、过滤器的代码
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;
// 设置返回的状态码、请求头、发送错误信息 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';
async function bootstrap() {
... // 全局注册错误的过滤器 app.useGlobalFilters(new HttpExceptionFilter());
}
bootstrap();
4、测试,返回的错误信息
{
"statusCode": 400, "error": "Bad Request", "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';
interface ResponseT>
{
data: T;
}
@Injectable()export class TransformInterceptorT>
implements NestInterceptorT, ResponseT>
>
{
intercept( context: ExecutionContext, next: CallHandlerT>
, ): ObservableResponseT>
>
{
return next.handle().pipe( map(data =>
{
return {
data, code: 0, message: '请求成功', }
;
}
), );
}
}
3、全局注册
...import {
TransformInterceptor }
from './interceptor/transform.interceptor';
async function bootstrap() {
... // 全局注册拦截器 app.useGlobalInterceptors(new TransformInterceptor());
...}
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返回给前端数据格式内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
您可能感兴趣的文章:- Nest.js 授权验证的方法示例
- Nest.js环境变量配置与序列化详解
- nest.js 使用express需要提供多个静态目录的操作方法
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: nestjs返回给前端数据格式的封装实现
本文地址: https://pptw.com/jishu/594579.html
