nestjs返回给前端数据格式的封装实现


Posted in Javascript onFebruary 22, 2021

一般开发过程中不不会根据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 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、全局注册

...
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返回给前端数据格式内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
Jan 09 Javascript
使用js在页面中绘制表格核心代码
Sep 16 Javascript
jQuery实现防止提交按钮被双击的方法
Mar 24 Javascript
JavaScript使用Math.Min返回两个数中较小数的方法
Apr 06 Javascript
JavaScript使用slice函数获取数组部分元素的方法
Apr 06 Javascript
JS实现双击屏幕滚动效果代码
Oct 28 Javascript
js绘制购物车抛物线动画
Nov 18 Javascript
JS 实现计算器详解及实例代码(一)
Jan 08 Javascript
Bootstrap实现的经典栅格布局效果实例【附demo源码】
Mar 30 Javascript
js中apply与call简单用法详解
Nov 06 Javascript
Parcel 打包示例(React HelloWorld)
Jan 16 Javascript
antd design table更改某行数据的样式操作
Oct 31 Javascript
NestJs使用Mongoose对MongoDB操作的方法
Feb 22 #Javascript
linux服务器快速卸载安装node环境(简单上手)
Feb 22 #Javascript
k8s node节点重新加入master集群的实现
Feb 22 #Javascript
js实现简单图片拖拽效果
Feb 22 #Javascript
用vite搭建vue3应用的实现方法
Feb 22 #Vue.js
详解Vite的新体验
Feb 22 #Javascript
详解Vue3.0 + TypeScript + Vite初体验
Feb 22 #Vue.js
You might like
基于mysql的论坛(7)
2006/10/09 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
2014/06/10 PHP
PHP图片处理之图片背景、画布操作
2014/11/19 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
PHP 的比较运算与逻辑运算详解
2016/05/12 PHP
javascript css float属性的特殊写法
2008/11/13 Javascript
IE无法设置短域名下Cookie
2010/09/23 Javascript
容易被忽略的JS脚本特性
2011/09/13 Javascript
iframe子父页面调用js函数示例
2013/11/07 Javascript
document.forms[].submit()使用介绍
2014/02/19 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
2015/03/02 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
jquery悬浮提示框完整实例
2016/01/13 Javascript
微信小程序 SocketIO 实例讲解
2016/10/13 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
vue2.0模拟锚点的实例
2018/03/14 Javascript
微信小程序实现图片滚动效果示例
2018/12/05 Javascript
Python isinstance判断对象类型
2008/09/06 Python
Python实现二分查找算法实例
2015/05/26 Python
python让列表倒序输出的实例
2018/06/25 Python
pyqt5 实现在别的窗口弹出进度条
2019/06/18 Python
python中对_init_的理解及实例解析
2019/10/11 Python
Win10里python3创建虚拟环境的步骤
2020/01/31 Python
HTML5 canvas基本绘图之文字渲染
2016/06/27 HTML / CSS
椰子猫砂:CatSpot
2018/08/27 全球购物
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
全球最大的生存食品、水和装备专用在线市场:BePrepared.com
2020/01/02 全球购物
颇特女士香港官网:NET-A-PORTER香港
2021/03/08 全球购物
银行柜员应聘推荐信范文
2013/11/24 职场文书
考试不及格检讨书
2014/01/09 职场文书
计算机专业职业生涯规划范文
2014/01/19 职场文书
单位工作证明书格式
2014/10/04 职场文书
导游词之上海杜莎夫人蜡像馆
2019/11/22 职场文书
详解GaussDB for MySQL性能优化
2021/05/18 MySQL
Redis全局ID生成器的实现
2022/06/05 Redis
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技