Nest.js是基于Node.js的后端开发框架。它实现了MVC模式,即模型,视图和控制器的层。响应库具有更高的级别。它也很容易整合诸如GraphQl,WebSocket之类的功能,该功能适用于大型企业 -水平发展。
Nest.js在国内外使用了很多。让我们从今天开始:执行笔记管理功能,以实现MySQL的添加,删除,删除和更改,并提供恢复的界面。
完整代码:https://github.com/quarkgluonplasma/nestjs-earcerize
首先,从远离前端的数据库开始。
在MySQL的官方网站上下载MySQL,安装并启动服务。
目前,您可以使用命令行来编写SQL操作数据库。
但是命令行不够方便,因此我们还希望下载接口MySQL客户端。我在这里使用navicat。
它可以在视觉上创建数据库,表等,并可以在编辑器中编写SQL,然后执行。例如,我创建了Hello的数据库和图中的一堆表。
Node.js代码也可以连接到数据库服务,然后远程执行SQL以添加和删除数据库表。
但是直接执行SQL是很乏味的。我只能操作对象吗?如果对象属性更改,它将自动执行SQL以同步数据库?就像Vue的数据更改为自动同步视图一样。
数据库和对象之间关系的映射称为ORM(对象关系映射),该映射是将表映射到对象中,以将表和表之间的关联映射到对象之间的关系中。通过SQL将与数据库同步。
Typeorm是实现ORM的框架。它可以描述装饰设备的映射关系,例如@entity,@column(列),@primary gripartcolumn
在Decorator声明关系之后,在建立数据库连接后,我们只需要操作对象,TypeOmm将自动执行SQL即可将更改同步到数据库。
通过这种方式,我们实现了我们对数据库表的操作以及添加,删除,删除和检查的操作。
完成数据库部分后,我们期待处理请求的一部分。
请求的后端框架使用Nest.js,它提供了控制器,服务和其他部门,这是MVC模式的实现。
控制器负责处理请求并将处理参数传递给服务。
服务负责实现业务逻辑,并且可以实现基于类型的添加,删除和调查功能,以实现各种高层业务逻辑。
另外,Nest.js还将模块划分。该模块是逻辑模块。与我们经常说的文件相对应的模块不同,它包含控制器,服务等,这是这些资源的逻辑划分。
模块和模块之间可能存在因关系,并且有进口和导出。
因此,模块语句是这样的:
BBB模块是通过@Module Decorative设备声明的,该设备取决于AAA模块,即在ImportS.Controller中引入的AAAMODULE,包括BBBController,包括BBBController,提供商是提供商,具有服务,工厂,工厂和其他类型。它包括bbbbservice。同时,可以由其他模块引入BBBBSERVICE。
控制器的陈述也是通过装饰员:
服务语句也是装饰器,但不称为服务,而是被称为注射剂。
至于为什么被称为注射剂,它涉及IOC的概念。
IOC(控制倒数)是控制反转的含义,即,您只需要声明自己的依赖性,就不需要创建依赖对象,并且容器将其注入您。
因为所有对象均由容器管理,因此自然可以在创建对象时注入所需的依赖项。这是IOC的原则。
服务可以用作取决于其他类别的实例,因此使用了可注射的装饰。
所有模块都将具有一个模块作为入口,启动IOC容器从此模块开始:
以上是典型的NEST.JS启动代码,从AppModule模块开始,以创建一个IOC容器,以处理端口3000的请求。
Reflect-Metadata模块是用于分析课程的装饰器,因为要在类中注入实例,必须解析它通过装饰器依赖于什么依赖性,然后将其注入。您需要依靠此软件包。
这是Nest.js:IOC + MVC的大致设计,通过IOC容器管理对象的相关关系,并使用控制器,服务,模块来划分职责。
typeorm是通过SQL同步对象的操作到数据库的ORM,而Nest.js是Web Back -End应用程序的MVC层,以及IOC管理对象的创建和依赖性。这些两个自然合并,并且是合并的。组合是 @nestjs/typeorm。
@nestjs/typeorm pack提供TypeorMmodule模块,该模块具有两个静态方法和Forture。
Forrot用于创建数据库连接,引入一些配置参数,并将其引入导入模块。
ForFeature用于创建与不同实体类相对应的存储库,并将其引入实体的模块中。
我们知道什么typeorm和nest.js正在做什么以及如何使用它,只需总结:
typeorm是ORM框架。它用于将对象的操作同步到数据库的操作,并将自动执行SQL语句。
nest.js是MVC框架,用于Web Back -End应用程序的逻辑层中。它还提供了进一步分配控制器和服务的模块。此外,nest.js提供了一个IOC容器,统一管理对象的创建和依赖性以及从该语句中注入依赖项。
两者的组合是 @nestjs/typeorm的袋子。它有两种生成模块的静态方法。
说了很多话,每个人都可能不太清楚它,所以让我们做笔记的实际情况。
nest.js有很多模型代码。自己写作更麻烦。
首先,您需要设置骨架,使用
然后生成特定的模块代码
生成的代码包含控制器,服务,模块,还具有CRUD模型代码。
让我们关注控制器守则:
@controller的参数可以声明url路径。@get,@post,@patch,@delete还可以通过参数声明URL路径,最终将与两者进行对抗。例如, /xxx /:id方法。
@get,@post,@patch,@delete分别对应于不同的请求方法。
@Param是道路上的参数,@q是查询字符串的参数。
@Body将请求参数设置为对象的属性。用于传递数据的对象称为DTO(数据传输对象)。
然后,返回对象将在没有手动序列化的情况下序列化为JSON。
然后查看服务:
这些服务尚未详细实施。
我们将Typeorm介绍给数据库的CRUD。
在根模块中介绍数据库连接的模块
与新创建的模块中实体相对应的模块:
创建一个note entity并识别 @entity。并使用@column, @primarygeneratedColumn来识别列和主键。
然后,将操作类存储库注入服务中的服务,您可以实现额外的删除和更改注释。
使用的DTO是与参数相对应的对象,它们是实体属性的一部分的集合。例如,更新DTO:
通过这种方式,实现了增加,删除和更改的说明。
我们使用Postman测试效果:
运行并运行项目
您可以看到4个接口的路由映射成功。
数据库开头有两个记录:
可以通过查询接口正确找到它:
然后测试修改接口:
确实修改了数据库:
测试后,单个表的CRUD的功能正常。
我们完成了第一个nest.js的后端应用程序!
完整的代码上传github:https://github.com/quarkgluonplasma/nestjs-earpercize
typeorm是一个ORM框架。通过映射表和对象之间的相应关系,可以将对象的操作转换为数据库的操作,并自动执行SQL语句。
NEST.JS是一个MVC框架,可提供模块,控制器和服务的逻辑逻辑划分,还实现IOC模式,集中管理对象和自动注入依赖项。
typeorm和nest.js使用 @nestjs/typeoorm的软件包的组合,该软件包提供了两个静态方法:forroot和forfeature.forroot方法用于生成已连接到数据库的模块,并且ForFeature用于生成模块的模块。与实体相对应的存储库。
nest.js具有很多模型代码,可以使用 @nestjs/cli命令行工具(包括总体和每个模块)生成。
简而言之,即使您最初掌握了nest.js,也可以理解IOC和理解模块,控制器和服务的划分,ORM框架与TypeOmm结合使用,可以轻松地完成数据库表的CRUD。
nest.js是一个相对强大且流行的后端框架。仍然有必要学习它。我们进入了本文的大门,并将继续加深。