一、前言
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" ,控制台打印'统一异常处理';