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 相关文章推荐
editable.js 基于jquery的表格的编辑插件
Oct 24 Javascript
JS实现简单的Canvas画图实例
Jul 04 Javascript
js中apply方法的使用详细解析
Nov 04 Javascript
SyntaxHighlighter 3.0.83使用笔记
Jan 26 Javascript
javascript解决IE6下hover问题的方法
Jul 28 Javascript
js基于setTimeout与setInterval实现多线程
Jun 17 Javascript
javascript 判断一个对象为数组的方法
May 03 Javascript
Vue.js实例方法之生命周期详解
Jul 03 Javascript
让Vue也可以使用Redux的方法
May 23 Javascript
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
Jun 10 jQuery
微信小程序 flexbox layout快速实现基本布局的解决方案
Mar 24 Javascript
Vue全局事件总线你了解吗
Feb 24 Vue.js
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
php&amp;java(三)
2006/10/09 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
2013/10/10 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
2014/07/19 PHP
php实现基于openssl的加密解密方法
2016/09/30 PHP
用JS实现的一个include函数
2007/07/21 Javascript
php gethostbyname获取域名ip地址函数详解
2010/01/24 Javascript
JQuery循环滚动图片代码
2011/12/08 Javascript
javascript拖拽上传类库DropzoneJS使用方法
2013/12/05 Javascript
jquery下拉select控件操作方法分享(jquery操作select)
2014/03/25 Javascript
jQuery实现隔行背景色变色
2014/11/24 Javascript
JS烟花背景效果实现方法
2015/03/03 Javascript
js闭包所用的场合以及优缺点分析
2015/06/22 Javascript
如何实现JavaScript动态加载CSS和JS文件
2020/12/28 Javascript
jquery判断密码强度的验证代码
2020/04/22 Javascript
详解使用vue脚手架工具搭建vue-webpack项目
2017/05/10 Javascript
Angular中管道操作符(|)的使用方法
2017/12/15 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
2018/08/17 Javascript
vuex actions传递多参数的处理方法
2018/09/18 Javascript
nodejs 使用http进行post或get请求的实例(携带cookie)
2019/01/03 NodeJs
使用python解析xml成对应的html示例分享
2014/04/02 Python
python中解析json格式文件的方法示例
2017/05/03 Python
Python调用C语言的方法【基于ctypes模块】
2018/01/22 Python
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
python计算无向图节点度的实例代码
2019/11/22 Python
Python随机数函数代码实例解析
2020/02/09 Python
Django ORM 查询表中某列字段值的方法
2020/04/30 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
HTML5 常见面试题之PC端和移动端区别介绍
2018/01/22 HTML / CSS
教育实习生的自我评价分享
2013/11/21 职场文书
任课老师推荐信范文
2013/11/24 职场文书
机关门卫制度
2014/02/01 职场文书
乡镇干部个人对照检查材料思想汇报(原创篇)
2014/09/28 职场文书
专业见习报告范文
2014/11/03 职场文书
仓库管理员岗位职责
2015/02/03 职场文书
Nginx本地目录映射实现代码实例
2021/03/31 Servers