nestjs[hello-world官方项目解析]

前言

近几年由于 Node.js 的迅速发展,JavaScript 已经变成了一种全栈通用语言。
前端方面诞生了一系列提高开发者生产力的优秀前端项目框架:诸如 Angular、React、Vue 等。
而后端方面虽然有着诸如 Express,Koa,Fastify 等一系列优秀的开源库、工具,以及如eggjs、koa2等一些企业级的开发工具。但却缺乏真正意义上的框架。
直到nestJS的出现。

Nest 是什么

官方概述:
一个深受 Angular 启发,旨在构建高效、可靠、高拓展性服务端应用程序的先进的 Node.js 框架。
正如 Nest 作者所言——深受 Angular 启发,所以 Nest 的开发体验与 Angular 有些类似。既可以使用 TypeScript(与 Angular 相同,官方推荐),也可以使用 JavaScript 构建项目,同时结合了面向对象编程(Object Oriented Programming)、函数式编程(Functional Programming)、函数响应式编程(Functional Reactive Programming)等元素,可兼容主流第三方库与插件。

Nest 特点

nestjs[hello-world官方项目解析]_第1张图片
官方概述:
1.高拓展性。可正常使用任何第三方库。

2.多功能性。适用于多种类型的服务端应用程序编写。

3.前沿先进。结合最前沿的 JavaScript 技术特性,将设计模式和成熟方案的理念带入 Node.js 领域中。

个人认为较为突出的有几点:

1.官方推荐使用 TypeScript,工程化意义重大。

2.内置支持 Express/fastify 服务器及其api 同时具有 socket.io 等套件,兼容其他库。

3.使用装饰器(ES7 Decorator)函数,无侵入式的语法使得代码逻辑更为清晰。

4.遵循控制反转(IoC, Inversion of Control)思想,大量使用依赖注入(DI, Dependency Injection)的设计模式,大大降低了单元间的耦合度。

5.内置的异常控制层(Exception Filter),权限控制层(Guard)与拦截层(Interceptor)。

6.集成工程化的测试,官方使用 Jest 测试框架。

官方hello-world项目解析

官方创建方式

https://docs.nestjs.cn/7/firststeps?id=%e5%bb%ba%e7%ab%8b

目录结构

nestjs[hello-world官方项目解析]_第2张图片

结构说明

  • src—项目核心内容开发文件夹
  • test—测试用例与配置文件
  • .gitignore—git要忽略的文件列表的配置文件,比如上传时忽略node_modules文件夹(初始项目可能没有,可以自己定义)

nestjs[hello-world官方项目解析]_第3张图片

  • .prettierrc—格式化工具prettier的配置文件,用于开发期间代码格式化操作的配置(可以百度配置内容)
  • nest-cli.json—nest脚手架配置文件(可以百度配置内容)
  • package.json—相信玩过webpack或者其他脚手架的人都知道这个文件作用了

关于启动模式
nestjs[hello-world官方项目解析]_第4张图片
通常情况各个启动操作如下:

    npm run prebuild   //使用rimraf工具删除dist
	npm run build // 打包(常用操作) 
	npm run format //启动prettier工具对src/test下所有.ts文件强制格式化整理
	npm run start  // 开启项目
	npm run start:dev //开发模式:与start区别在于可以实时监听代码改变不用重启(常用操作) 
	npm run start:debug //开发模式:debug操作
    npm run start:prod // 开发模式:启动dist/main中的项目(需先打包存在dist文件夹)
    npm run lint // 启动tslint(代码规范工具)检查
    npm run test // 测试模式 ---具体参考jest工具
    npm run test:watch // 测试模式---实时监听改变
    npm run test:debug // 测试模式---debug操作
    npm run test:e2e // 读取./test/jest-e2e.json的配置文件开启单元测试
  • README.md git说明文件
  • tsconfig.build.json—打包的时候对ts的配置,不打包 node_modules文件夹、test文件夹、dist文件夹以及以.spec.ts结尾的文件
  • tsconfig.json—本项目中ts的配置文件(可以百度配置内容)
  • tslint.json—本项目中tslint(ts代码检查工具)配置文件(可以百度配置内容)

文件说明

src 文件夹

主程序入口文件及若干模块文件层次关系:

nestjs[hello-world官方项目解析]_第5张图片
以上对src文件夹结构有了初步的认识
入口文件 main.ts 引导程序运行
加载模块 app.module.ts,模块中包括:
1.控制器 app.controller.ts
2.服务提供商 app.service.ts
3.测试用例 app.controller.spec.ts 等组件(这个测试用例可以删除,以后测试用例放置在test中统一管理)

app.controller.spec.ts
这个文件是一个测试用例文件,用于测试controller和service中对应的内容是否有效,引入了nest的测试模块采用moche测试工具语法

**app.controller.ts **
app.controller.ts 文件中定义了一个类,通过装饰器 @Controller() 使其成为一个路由控制类。类方法中,有构造函数 constructor 以及带有装饰器 @Get() 的 getHello 函数。其中AppService来自与app.service.ts文件

app.service.ts 文件:
app.service.ts中定义了一个AppService类通过@Injectable()装饰器将本类进行标注
getHello函数则是真正的实现方法

app.module.ts 文件:
这个文件用于注册各种模块或者服务的内容
@Module({}) // 模块的装饰器,参考NestJs官网
imports: [] //其他模块注册:如UserModule之类的
controllers: [] // 装饰器@Controller标注的类注册的地方,这里注册了app.controller.ts中的AppController类
providers:[] // 装饰器@Injectable()标注的类注册的地方,这里注册了app.service.ts中的AppService类

main.ts 文件:
main.ts文件项目启动以及端口配置

启动项目

npm run start
然后从localhost:3000查看
从图中我们能够得到的信息大致为
1.运行 nodemon 监听项目文件
2.通过 ts-node 引导入口文件 main.ts
3.初始化模块与路由

关于装饰器和依赖注入

依赖注入给人的感觉就像是不需要自己去new XX()实例,直接引入过来就可以用 如:
import { UserService } from ‘./user.service’;
constructor(private readonly userService: UserService) {}
this.userService.getlist();
前提是需要注册
@Module({
providers: [
UserService
]
})
装饰器给人的感觉就像是在某个方法/属性或者类上面加个说明。如:@controller告诉系统我是控制器类,实例化的时候你要让我来控制路由之类的、@body就是代表express中的request.body
详细情况请参照官网或者自行搜索答案,每个人的理解都有不同

test 文件夹

app.e2e-spec.ts—e2e单元测试文件夹主要模拟接口请求操作,这里模仿了其操作可以尝试启用npm run test:e2e试试,注意:和app.controller.spec.ts测试用例还是有区别的。
app.e2e-spec.ts 文件:
配置文件可以在package.json里面看到引用

源码示例

https://gitee.com/twang-gitee/nest-study

nest入门学习步骤

https://blog.csdn.net/lxy869718069/article/details/114028195

你可能感兴趣的:(nestJS,nest学习,nest,hello-world)