修饰器(Decorator)
框架大量功能都是以 Decorator(修饰器)的方式使用。
@Resource、@Inject 修饰器
@Service 修饰器
@Aspect 修饰器
@Path
框架在 @Path
装饰器的基础上还提供了一些其它快捷的路由装饰器 @umajs/path
@Private 修饰器
@Param、@Query 修饰器
自定义参数装饰器 createArgDecorator
注意
从 v1.1.* 版本开始,
createArgDecorator
更新了参数方式,使传入参数不受一个的限制。
// v1.0.*
function createArgDecorator(fn: (argKey: string, ctx: IContext) => any): (...argProps: any[]) => ParameterDecorator;
// v1.1.*
function createArgDecorator(fn: (ctx: IContext, ...argProps: any[]) => any): (...argProps: any[]) => ParameterDecorator;
1
2
3
4
5
2
3
4
5
示例如下
// user.controller.ts
import { BaseController, Param } from '@umajs/core'
import { AgeCheck } from '../decorator/AgeCheck'
export default class User extends BaseController {
save(@Param('name') name: string, @AgeCheck('age') age: number) {
// ...
}
}
// decorator/AgeCheck.ts
import { createArgDecorator, Result, IContext } from '@umajs/core'
/**
* 1、参数的聚合 Model
* 2、参数的校验
* 3、参数的转换
* 4、便捷方法
* 5、utils、config 等也可以通过此装饰器快速引用
*/
export const AgeCheck = createArgDecorator((ctx: IContext, ageKey: string) => {
let age = 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
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39