写在前面
虽然已经有很多优秀的服务框架了,比如 Express.js、Koa 等,但是自己还是有些多这方面的构想,比如 express,接口都是通过 app.
来指定,总跟我的预想不太合,其实我更想将不同接口放在不同的一个类或者方法中(不知道 express 有没有,因为网上都是 app. 这么写的,也没深入了解),而且我比较喜欢面向对象的方式,主要还是自己想摸索一下开发一个属于自己的服务框架😁
代码
已经写了一部分,但是封装的还有很多不足,先上目前的代码:
index.js
const {nodeAction, Action, actionInterceptor} = require("@jl15988/node-action");const userInfo = {"id": 1,"username": "admin","nickname": "管理员","email": "aoteman@126.com","mobile": "15612345678","sex": 1,"avatar": null,"loginIp": "192.168.0.8","loginDate": 1731468594935,"createTime": 1609837427000,"roles": [{"id": 1,"name": "超级管理员"},{"id": 2,"name": "普通角色"}],"dept": null,"posts": [{"id": 1,"name": "董事长"}],"socialUsers": []
}// 创建用户控制器
const UserAction = new Action('UserAction', (action) => {// 设置 user action 的路由前缀action.mapping('/user')// 获取用户信息接口action.get('/get', (requestInfo) => {// 请求参数console.log(requestInfo.params)// 返回用户信息return userInfo})// 修改用户信息接口action.post('/update', (requestInfo) => {// 请求体console.log(requestInfo.body)// 返回修改结果return {code: 200,message: '修改成功'}})
})const interceptors = [{// 拦截器名name: 'onLoad',// 执行排序,如果重复则按添加的顺序,没有顺序的优先级最低sort: 0,// 解析路由之前的拦截器load: (requestInfo, response) => {return true},// 执行路由处理方法之前的拦截器before: (requestInfo, response, routeInfo) => {return true},// 执行路由处理方法之后的拦截器after: (requestInfo, response, routeInfo, handleResult) => {return true}
}]// 统一异常处理器
nodeAction.actionErrorHandler = (request, response, error) => {console.error(error)
}// 统一返回数据处理器
nodeAction.actionResultHandler = (request, response, res) => {console.log(res)return res
}nodeAction// 控制器.actions([UserAction])// 拦截器.interceptors(interceptors)// 端口号.port(3000)// 启动.start()
执行 node src/index.js
启动
浏览器访问:http://{本地地址}:3000/user/get
说明
1. action 控制器
如上述代码示例,有一个 Action
类,用于构建控制器。
- 控制器接收 name 和一个方法,分别是该控制器的名称和处理函数,处理函数中用于指定接口和处理方法;
- 处理方法会有一个当前控制器本身的实例参数,可用于指定 mapping、get、post、put、delete 等;
- mapping 用于指定该控制器下所有接口的统一前缀路由;
- get等接口接收路由和处理函数,处理函数会有 requestInfo 请求信息和 response 响应两个参数,用于拿取请求信息和处理响应(在新版本中 requestInfo 和 response 被归到了一个参数中[actionParam],同时包含请求路径、请求URL、请求方法、请求参数、请求体、转发、获取静态资源等参数和方法)。
2. interceptor 拦截器
在新版本中,nodeAction.interceptors 接收的是 ActionInterceptor 数组,而不是 json 数组了,也是用于规范拦截器的定义。拦截器接收 load、before、after 处理函数用于拦截解析路由之前、执行路由处理方法之前、执行路由处理方法之后。通过返回 true 或 false 来指定不拦截或者拦截。
3. handler 处理器
目前有两种处理器
- actionErrorHandler 请求异常处理器。由于统一处理全局异常的处理器,有 request(请求)、response(响应)、error(异常)三个参数;
- actionResultHandler 响应结果处理器。用于统一处理全局响应结果的处理器,有request(请求)、response(响应)、res(结果)三个参数。
项目地址
https://gitee.com/jl15988/node-action
结尾
以上就是目前已经开发出来的东西,很多东西都有待优化,有过你有好的建议或想法,欢迎提议,感谢!