详情
Umajs,an easy-to-use NodeJS framework base on Typescript.
Umajs
是基于 Koa2 使用 TypeScript 开发、通过装饰器使用大部分功能的 Web 框架。
Aspect
可以很方便的对任意方法进行拦截、修改等,并且能将中间件转换成 Aspect.around
使用下面代码展示了以下几个特性:
1、通过
createArgDecorator
创建参数装饰器,对age
参数进行校验和类型转换2、controller 通过框架提供的
Result
便捷的响应数据3、
Aspect
通过around
方法进行方法的拦截,对方法的参数
进行校验, 对返回值
进行校验/修改
// index.controller.ts
import Method from './method.aspect'
import { AgeCheck } from './ArgDecorator'
@Aspect(Method) // 可以装饰在类上对所有方法进行装饰
export default class extends BaseController {
// @Aspect(Method) // 可以装饰在方法上对单一方法进行装饰
@Path('/hello')
index(@Query('name') name: string, @AgeCheck('age') age: number) {
return Result.json({
name,
age,
})
}
}
// ArgDecorator.ts
export const AgeCheck = createArgDecorator((ctx: IContext, ageKey: string) => {
let age = <number><unknown>ctx.query[ageKey];
if (age === undefined) return Result.json({
code: 0,
msg: '请加上 age 参数',
});
age = +age;
if (Number.isNaN(age) || age < 0 || age > 120) return Result.json({
code: 0,
msg: '请传入正确的 age 参数',
});
return age;
});
// method.aspect.ts
import { IAspect, IProceedJoinPoint } from '@umajs/core';
export default class implements IAspect {
async around(proceedPoint: IProceedJoinPoint) {
const { proceed, args } = proceedPoint;
// 校验参数
if (args[0] !== 'Umajs') return Result.send('name 必须为 Umajs');
const result = await proceed(...args);
if (result.type === 'json') {
// 为 JSON 返回值加上时间戳
result.data.time = new Date();
}
return result;
}
}