3.39.3 • Published 23 days ago

@eggjs/tegg-aop-plugin v3.39.3

Weekly downloads
-
License
-
Repository
github
Last release
23 days ago

@eggjs/tegg-aop-plugin

Usage

// plugin.js
export.aopModule = {
  enable: true,
  package: '@eggjs/tegg-aop-plugin',
};

Advice

使用 @Advice 注解来申明一个实现,可以用来监听、拦截方法执行。

注意:Advice 也是一种 Prototype,可以通过 initType 来指定不同的生命周期。

import { Advice, IAdvice } from '@eggjs/tegg/aop';

@Advice()
export class AdviceExample implements IAdvice {
  // Advice 中可以正常的注入其他的对象
  @Inject()
  private readonly callTrace: CallTrace;

  // 在函数执行前执行
  async beforeCall(ctx: AdviceContext): Promise<void> {
    // ...
  }

  // 在函数成功后执行
  async afterReturn(ctx: AdviceContext, result: any): Promise<void> {
    // ...
  }

  // 在函数成功后执行
  async afterThrow(ctx: AdviceContext, error: Error): Promise<void> {
    // ...
  }

  // 在函数退出时执行
  async afterFinally(ctx: AdviceContext): Promise<void> {
  }

  // 类似 koa 中间件的模式
  // block = next
  async around(ctx: AdviceContext, next: () => Promise<any>): Promise<any> {
  }
}

Pointcut

使用 @Pointcut 在某个类特定的方法上申明一个 Advice

import { Pointcut } from '@eggjs/tegg/aop';
import { ContextProto } from '@eggjs/tegg';

@ContextProto()
export class Hello {

  // 创建 Hello.hello 的切面 AdviceExample,并传递 adviceParams 给 AdviceExample
  // AdviceExample 的切面函数可以通过 ctx.adviceParams 拿到注解传入的参数
  @Pointcut(AdviceExample, { adviceParams: { foo: 'bar' } })
  async hello(name: string) {
    return `hello ${name}`;
  }
}

Crosscut

使用 @Crosscut 来声明一个通用的 Advice,有三种模式

  • 指定类和方法
  • 通过正则指定类和方法
  • 通过回调来指定类和方法

注意:egg 中的对象无法被 Crosscut 指定到。

import { Crosscut, Advice, IAdvice } from '@eggjs/tegg/aop';

// 通过类型来指定
// 创建 CrosscutClassAdviceExample.hello 的切面 CrosscutExample,并传递 adviceParams 给 CrosscutExample
// CrosscutExample 的切面函数可以通过 ctx.adviceParams 拿到注解传入的参数
@Crosscut({
  type: PointcutType.CLASS,
  clazz: CrosscutExample,
  methodName: 'hello',
}, { adviceParams: { foo: 'bar' } })
@Advice()
export class CrosscutClassAdviceExample implements IAdvice {
}

// 通过正则来指定
@Crosscut({
  type: PointcutType.NAME,
  className: /crosscut.*/i,
  methodName: /hello/,
})
@Advice()
export class CrosscutNameAdviceExample implements IAdvice {
}

// 通过回调来指定
@Crosscut({
  type: PointcutType.CUSTOM,
  callback:  (clazz: EggProtoImplClass, method: PropertyKey) => {
    return clazz === CrosscutExample && method === 'hello';
  }
})
@Advice()
****export class CrosscutCustomAdviceExample implements IAdvice {
}
3.39.1

23 days ago

3.39.2

23 days ago

3.39.3

23 days ago

3.38.0

1 month ago

3.39.0

1 month ago

3.37.3

1 month ago

3.37.0

1 month ago

3.37.1

1 month ago

3.36.3

1 month ago

3.36.2

1 month ago

3.36.1

1 month ago

3.36.0

2 months ago

3.35.0

2 months ago

3.35.1

2 months ago

3.33.0

2 months ago

3.33.1

2 months ago

3.34.0

2 months ago

3.32.0

3 months ago

3.31.0

4 months ago

3.30.1

4 months ago

3.30.0

4 months ago

3.29.0

5 months ago

3.28.2

5 months ago

3.28.1

5 months ago

3.28.0

5 months ago

3.20.0

9 months ago

3.22.0

8 months ago

3.15.0

9 months ago

3.17.0

9 months ago

3.19.0

9 months ago

3.12.0

10 months ago

3.26.0

6 months ago

3.21.0

8 months ago

3.23.0

8 months ago

3.14.1

9 months ago

3.14.0

10 months ago

3.14.3

9 months ago

3.16.0

9 months ago

3.14.2

9 months ago

3.18.1

9 months ago

3.18.0

9 months ago

3.14.4

9 months ago

3.13.0

10 months ago

3.25.1

7 months ago

3.27.0

6 months ago

3.25.2

7 months ago

3.10.0

11 months ago

3.11.0

11 months ago

3.11.1

11 months ago

3.9.0

11 months ago

3.8.0

12 months ago

3.6.2

1 year ago

3.6.1

1 year ago

3.6.0

1 year ago

1.5.6

1 year ago

3.6.3

1 year ago

3.7.0

1 year ago

3.5.2

1 year ago

3.5.1

1 year ago

3.5.0

1 year ago

1.5.5

1 year ago

1.5.4

1 year ago

1.5.3

1 year ago

1.5.2

1 year ago

3.0.0-alpha.0

1 year ago

3.4.0

1 year ago

3.3.1

1 year ago

3.2.2

1 year ago

3.3.0

1 year ago

3.2.1

1 year ago

3.2.0

1 year ago

3.1.0

1 year ago

3.3.4

1 year ago

3.3.3

1 year ago

3.2.4

1 year ago

3.4.1

1 year ago

3.3.2

1 year ago

3.2.3

1 year ago

3.0.0

1 year ago

1.5.1

1 year ago

1.5.0

1 year ago

1.4.1

1 year ago

1.4.0

1 year ago

1.3.9

2 years ago

1.2.0

2 years ago

1.1.1

2 years ago

1.1.0

2 years ago

1.3.7

2 years ago

1.3.6

2 years ago

1.3.5

2 years ago

1.3.3

2 years ago

1.3.2

2 years ago

1.3.1

2 years ago

1.3.0

2 years ago

1.3.8

2 years ago

1.0.5

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago

0.2.0

2 years ago