写在前面
虽然已经有很多优秀的服务框架了,比如 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
结尾
以上就是目前已经开发出来的东西,很多东西都有待优化,有过你有好的建议或想法,欢迎提议,感谢!