最近已经使用过一段时间的nestjs,让人写着有一种java spring的感觉,nestjs可以使用express的所有中间件,此外完美的支持typescript,与数据库关系映射typeorm配合使用可以快速的编写一个接口网关。本文会介绍一下作为一款企业级的node框架的特点和优点。
- 从依赖注入(DI)谈起
- 装饰器和注解
- nestjs的“洋葱模型”
- nestjs的特点总结
原文在我的博客中: github.com/fortheallli…
欢迎star和fork
一、从依赖注入(DI)谈起
(1)、angular中的依赖注入
从angular1.x开始,实现了依赖注入或者说控制反转的模式,angular1.x中就有controller(控制器)、service(服务),模块(module)。笔者在早年间写过一段时间的angular1.3,下面举例来说明:
var myapp=angular.module('myapp',['ui.router']);
myapp.controller('test1',function($scope,$timeout){}
myapp.controller('test2',function($scope,$state){}
复制代码
上面这个就是angular1.3中的一个依赖注入的例子,首先定义了模块名为“myapp”的module, 接着在myapp这个模块中定义controller控制器。将myapp模块的控制权交给了myapp.controller函数。具体的依赖注入的流程图如下所示:
myapp这个模块如何定义,由于它的两个控制器决定,此外在控制器中又依赖于scope、timeout等服务。这样就实现了依赖注入,或者说控制反转。
(2)、什么是依赖注入
用一个例子来通俗的讲讲什么是依赖注入。
class Cat{
}
class Tiger{
}
class Zoo{
constructor(){
this.tiger = new Tiger();
this.cat = new Cat();
}
}
复制代码
上述的例子中,我们定义Zoo,在其constructor的方法中进行对于Cat和Tiger的实例化,此时如果我们要为Zoo增加一个实例变量,比如去修改Zoo类本身,比如我们现在想为Zoo类增加一个Fish类的实例变量:
class Fish{}
class Zoo{
constructor(){
this.tiger = new Tiger();
this.cat = new Cat();