介绍
本文参考了nestjs官方文档
在使用了用nodejs
搭建的koa
和express
框架后发现使用前端的语法也可以搭建一个不错的后端,而现在又逐渐趋势于用typescript
来开发,就发现了nestjs
可以很好的支持typescript
并进行一个工程化的开发。
新建
在开始之前,可以使用nest的脚手架来快速搭建一个nest项目。(确保Node.js(>=10.13.0,v13除外))
npm i -g @nestjs/cli
nest new project-name #project-name为项目名,会在当前目录下新建一个nestjs项目
创建时会让你选择用什么作为包管理工具,这里默认使用npm。
等待完成后就可以进入到项目中使用npm run start
来运行项目了。(也可以使用npm run start:dev
来运行启动热更新。)
文件介绍
项目创建后,自动在src
生成了一下文件:
app.controller.ts
app.controller.spec.ts
app.module.ts
app.service.ts
main.ts
main.ts
作为项目入口文件,默认监听了3000
端口,并将AppModule
进行了挂载。根据nestjs
自动生成的这些文件就可以大概了解一个nestjs
项目应该如何书写。
module
因为在main.ts
的入口文件中引入了AppModule
,所以首先我们先看module
文件。
根据上图可以看到先前的AppController
和AppService
文件都是经过AppModule
模块,这里就涉及nestjs很重要的概念,Controllers
和Providers
,这就像后端很经典的MVC
架构,将控制层和服务层分层进行,将所有对数据库的操作都放在Providers
(但不是所有的Providers
都是用于操作数据库)中,将要返回前端的数据逻辑都在Controllers
中进行,而Module
主要为了管理控制层和服务层,有可能一个接口中需要调用多个数据库的操作,这时候就需要在Module
中注册。
在目前的Module的imports
的部分就会用到上图的模块管理,也可以在其中结合TypeOrm
来实现用ORM
框架来对数据库进行操作。
总之,在每次新建了控制器或提供者就需要在module
中进行引入,这样nest才能识别的到。
Controller
在控制器中,主要处理要返回给客户端的相应相关的数据。
可以使用路由来实现一个基本的接口。
//@Controller创建一个以/text为路径的控制器
@Controller('/text')
export class