express 最方便的异常处理 (9)

119 阅读1分钟

一、前言

express好用但是简陋,异常处理一直都是一个坑。感觉这个express衍生框架对于异常的处理还是很方便的。

二、建立测试用例

2.1 创建项目

npx tsdx create web

2.2 添加express(这里用的衍生框架)

npm install j-spring-mvc --save

2.3建立测试用例

src/index.ts


import { spring } from 'j-spring'
import {SpringMvcModule,Controller, Get, ResponseBody} from 'j-spring-mvc'

//控制器
@Controller('/api')
class ApiController {

    @Get()
    @ResponseBody()
    async hello(){
        return {msg:'hello'}
    }

}

//控制器集合
const controllerList = [ApiController]

//首先加载web的基础包,然后加载控制器
spring.bindModule([SpringMvcModule,controllerList]).invokeStarter();

2.4 运行测试用例 程序是否正常

请求:http://localhost:3000/api/hello 获得 {msg:'hello'}

2.5 添加异常处理

import { spring,Component } from 'j-spring'
import {SpringMvcModule,Controller, Get, ResponseBody, SpringMvcExceptionHandler} from 'j-spring-mvc'
import { errorInfo } from 'j-spring-mvc/dist/springMvcExtends';


//控制器
@Controller('/api')
class ApiController {

    @Get()
    @ResponseBody()
    async hello(){
        throw 'requst error'
        return {msg:'hello'}
    }

}

//就是实现一个异常处理组件  可以捕获所有错误,包括中间件的
@Component
class ExpressExceptionHandler implements SpringMvcExceptionHandler {
    isSpringMvcExceptionHandler(): boolean {
        return true;
    }
    hanlder(req: any, res: any, errorInfo: errorInfo, next?: Function | undefined): void {
        console.log('统一异常处理');
        res.status(errorInfo.code).json(errorInfo.error);
    }
}

//web配置
const webConfig = [ExpressExceptionHandler]

//控制器集合
const controllerList = [ApiController]

spring.bindModule([SpringMvcModule,webConfig,controllerList]).invokeStarter();

请求:<http://localhost:3000/api/hello

浏览器显示 "requst error" ,控制台打印'统一异常处理';