Vue3 + Nest 实现博客管理系统 后端篇(三):异常处理和格式化返回数据

Vue3 + Nest 实现博客管理系统 后端篇(二):用户表设计及登录注册功能实现 已经实现了登录注册的功能,同时也发现了对于异常返回的信息比较乱,还有返回的数据没有做统一的处理,本章节将会对这两个做一个处理

首先我们创建一个异常过滤器在libs/filters/http-exception.filter.ts

ts 复制代码
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 status =
      exception instanceof HttpException
        ? exception.getStatus()
        : HttpStatus.INTERNAL_SERVER_ERROR;

    const message = exception.message;

    Logger.log('错误提示', message);
    const errorResponse = {
      code: status,
      message,
      url: request.originalUrl,
      timestamp: new Date().toISOString(),
    };

    // 设置返回的状态码、请求头、发送错误信息
    response.status(status).json(errorResponse);
  }
}

在main.ts挂载为全局过滤器

我们继续使用查询接口进行测试

格式化返回数据

在开发过程中我们需要后端返回的数据接口一般为:

js 复制代码
{
    data: 返回数据,
    code: 状态码,
    message: 描述信息
    ...
}

首先我们在libs/filters/apiresult.format.ts 封装一下我们需要的结构

ts 复制代码
import { Injectable } from '@nestjs/common';

@Injectable()
export class ApiresultService {
  MESSAGE(code: number, message: string, data?: any) {
    return {
      code,
      message,
      data,
    };
  }
}

ApiresultService 类里面的MESSAGE接收至少两个参数(code, message)

code:状态码,message:描述信息,data:业务数据

然后我们继续在findAll 接口去测试,修改user.service.ts

ts 复制代码
  async findAll() {
    try {
      const data = await this.userRepository.find();
      return {
        ...this.Apiresult.MESSAGE(200, '查询成功', data),
      };
    } catch (error) {
      throw new HttpException(error, HttpStatus.INTERNAL_SERVER_ERROR);
    }
  }

在apifox 查询数据

数据格式化和异常处理就到这了,这个格式化目前是这么处理,肯定有更好的方式,以后可能还会再次更新修改,工作最开心的时刻除了发工资,节假日,就是周五了,哎嘿,今天周五!!!

相关推荐
牧羊狼的狼1 小时前
React 中的 HOC 和 Hooks
前端·javascript·react.js·hooks·高阶组件·hoc
知识分享小能手2 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
魔云连洲2 小时前
深入解析:Vue与React的异步批处理更新机制
前端·vue.js·react.js
mCell3 小时前
JavaScript 的多线程能力:Worker
前端·javascript·浏览器
超级无敌攻城狮4 小时前
3 分钟学会!波浪文字动画超详细教程,从 0 到 1 实现「思考中 / 加载中」高级效果
前端
excel5 小时前
用 TensorFlow.js Node 实现猫图像识别(教学版逐步分解)
前端
gnip6 小时前
JavaScript事件流
前端·javascript
赵得C6 小时前
【前端技巧】Element Table 列标题如何优雅添加 Tooltip 提示?
前端·elementui·vue·table组件
wow_DG6 小时前
【Vue2 ✨】Vue2 入门之旅 · 进阶篇(一):响应式原理
前端·javascript·vue.js
weixin_456904276 小时前
UserManagement.vue和Profile.vue详细解释
前端·javascript·vue.js