Zstu-Api相当于是Api Bridger,Zstu-Api会转发给定请求并将格式转换为更加友好的格式。
本程序为个人学习Typescript & MongoDB练手之作,后续可能将不再进行维护。
1. 安装MongoDB,并开启MongoDB服务器,无需任何设置
2. 克隆并编译本项目
git clone https://github.com/Neutron-Bomb/Zstu-Api
cd Zstu-Api
npm install && npm install tsc && tsc
3. 运行
node out/app.js
使用文档在doc
下,目前已加入10个接口
├─config 配置文件存放
├─controller 处理用户请求的Handler类
├─core 实际与接口交互的底层类
├─route 用户请求路径匹配
├─model 数据库模型
└─util 工具类
例如router/CommonRouter.ts
CommonRouter.get('/electricity/:studentId', CommonController.ElectricityHandler)
匹配请求为electricity/:studentId
的请求,electricity/2022111111111
即为合法请求,请求处理交给CommonController.ElectricityHandler
处理
async function ElectricityHandler(req: Request, res: Response) {
const studentId = req.params.studentId
res.json(await Common.Electricity(studentId))
}
控制器作用只限于获取相关参数,并构建底层类进行处理,例如上述Controller获取了studentId
,并传入Common.Electricity
进行处理,最终结果以json
格式返回
public static async Electricity(studentId: string) {
if (studentId.length != 13 || !Functions.isNumber(studentId)) {
throw Error('Param studentId error')
}
let url = 'some_url'
let payload = {
...
}
let res = await this.session({
url: url,
method: 'post',
data: QueryString.stringify(payload),
validateStatus: () => true
}).then(value => {
return value.data
})
return Formatter.Electricity(res)
}
Core
请求实际接口,获取原始
数据,并传入Formatter
进行进一步格式化处理
public static Electricity(json: any) {
let body = JSON.parse(json['body'])
if (body['message'] == '...') {
throw Error('some error')
}
return {
code: 0,
msg: '获取成功',
data: {
...
}
}
}
若是原始数据出现问题,或者请求失败,应直接抛出异常,异常会被Express中间件
捕获并统一返回错误信息给用户