NodeJS AOP 实践

早期接触 Java Spring 的时候,学习了 AOP 的思想,那么 JavaScript 是否可以使用类似的思想呢?

const { around } = require("aspect-ts");
class MyClass {
  myFunction() {
    console.log("run myFunction");
  }
}
const myClass = new MyClass();
// 异步方法测试
function asyncTest() {
  return new Promise(resolve => {
    console.log("run asyncTest");
    setTimeout(() => {
      resolve();
    }, 1000);
  });
}
// AOP 拦截
async function interceptor(nextAdvice) {
  await asyncTest();
  console.log("asyncTest finish");
  nextAdvice();
}

// AOP 申明
around(myClass, "myFunction", interceptor);

myClass.myFunction();
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

输出:

run asyncTest
asyncTest finish
run myFunction
1
2
3