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 查询数据

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

相关推荐
ncj3934379068 分钟前
vscode中对node项目进行断点调试
vscode·node.js
abigale032 小时前
webpack+vite前端构建工具 -11实战中的配置技巧
前端·webpack·node.js
专注API从业者2 小时前
构建淘宝评论监控系统:API 接口开发与实时数据采集教程
大数据·前端·数据库·oracle
Joker`s smile2 小时前
Chrome安装老版本、不同版本,自制便携版本用于前端调试
前端·chrome
weixin_416639972 小时前
爬虫工程师Chrome开发者工具简单介绍
前端·chrome·爬虫
我是如子啊2 小时前
【解决“此扩展可能损坏”】Edge浏览器(chrome系列通杀))扩展损坏?一招保留数据快速修复
前端·chrome·edge
灵性花火2 小时前
Qt的前端和后端过于耦合(0/7)
开发语言·前端·qt
孤水寒月6 小时前
基于HTML的悬窗可拖动记事本
前端·css·html
祝余呀6 小时前
html初学者第一天
前端·html
耶啵奶膘9 小时前
uniapp+firstUI——上传视频组件fui-upload-video
前端·javascript·uni-app