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 相关文章推荐
扩展String功能方法
Sep 22 Javascript
js中事件的处理与浏览器对象示例介绍
Nov 29 Javascript
动态创建script在IE中缓存js文件时导致编码的解决方法
May 04 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
Jun 09 Javascript
了不起的node.js读书笔记之例程分析
Dec 22 Javascript
点评js异步加载的4种方式
Dec 22 Javascript
js实现简单的省市县三级联动效果实例
Feb 18 Javascript
JS 实现导航菜单中的二级下拉菜单的几种方式
Oct 31 Javascript
vue页面使用阿里oss上传功能的实例(二)
Aug 09 Javascript
把JavaScript代码改成ES6语法不完全指南(分享)
Sep 10 Javascript
angular5 httpclient的示例实战
Mar 12 Javascript
js实现移动端图片滑块验证功能
Sep 29 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
在PHP3中实现SESSION的功能(三)
2006/10/09 PHP
一些PHP写的小东西
2006/12/06 PHP
php与mysql建立连接并执行SQL语句的代码
2011/07/04 PHP
PHP设计模式之责任链模式的深入解析
2013/06/13 PHP
PHP创建word文档的方法(平台无关)
2016/03/29 PHP
PHP经典算法集锦【经典收藏】
2016/09/14 PHP
[原创]php正则删除img标签的方法示例
2017/05/27 PHP
PHP异步进程助手async-helper
2018/02/05 PHP
php7 list()、session及其他模块的修改实例分析
2020/05/25 PHP
如何实现动态删除javascript函数
2007/05/27 Javascript
jQuery 学习第五课 Ajax 使用说明
2010/05/17 Javascript
window.location.hash 使用说明
2010/11/08 Javascript
js实时监听文本框状态的方法
2011/04/26 Javascript
Javascript Ajax异步读取RSS文档具体实现
2013/12/12 Javascript
php+js实现倒计时功能
2014/06/02 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
JS动态显示表格上下frame的方法
2015/03/31 Javascript
JavaScript基本语法讲解
2015/06/03 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
2016/09/29 Javascript
vuex中使用对象展开运算符的示例
2017/09/25 Javascript
自定义vue组件发布到npm的方法
2018/05/09 Javascript
对angularJs中ng-style动态改变样式的实例讲解
2018/09/30 Javascript
javascript 构建模块化开发过程解析
2019/09/11 Javascript
Python实现屏幕截图的代码及函数详解
2016/10/01 Python
Python将图片转换为字符画的方法
2020/06/16 Python
python实现AES加密解密
2019/03/28 Python
Python 实现微信防撤回功能
2019/04/29 Python
Django 用户认证组件使用详解
2019/07/23 Python
印度购买眼镜和太阳镜网站:Coolwinks
2018/09/26 全球购物
公务员培训自我鉴定
2013/09/19 职场文书
十月份红领巾广播稿
2014/01/22 职场文书
四年大学自我鉴定
2014/02/17 职场文书
团队激励口号
2014/06/06 职场文书
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS
Android开发手册Chip监听及ChipGroup监听
2022/06/10 Java/Android