乐趣区

NestJs学习之旅1快速开始

经过 NodeJs 系列课程和 Typescript 系列课程,终于开始了激动人心的 NestJs 学习之旅。

欢迎持续关注 NestJs 之旅 系列文章

介绍

Nest(或 NestJS)是一个用于构建高效,可扩展的 Node.js 服务器端应用程序的框架。它使用渐进式 JavaScript,内置并完全支持 TypeScript(但仍然允许开发人员使用纯 JavaScript 编写代码)并结合了 OOP(面向对象编程),FP(功能编程)和 FRP(功能反应编程)的元素。

import {Controller, Get} from '@nestjs/common';

@Controller('cats')
export class CatsController {@Get()
  findAll(): string {return 'This action returns all cats';}
}

熟悉 Java 的同学应该有似曾相识的感觉,SpringBoot 中大量使用注解来简化开发。现在,使用基于 ES6 装饰器构建的 NestJs 框架,你也可以做到!

优缺点

先说说优点吧:

  • 完美支持 Typescript,因此可以使用日益繁荣的 TS 生态资源
  • 兼容 express 中间件,降低造轮子成本
  • 完美支持响应式编程框架 rxjs
  • 完美支持依赖注入
  • 模块化思想,方便开发以及后期维护
  • 使用装饰器简化开发,减少样板代码
  • 组件化设计,解决 Node.js 无全栈框架约束的现存问题

当然,” 缺点 ” 也是有点的,不过熟练之后这些都不是缺点:

  • 基于 TS 导致的语言门槛
  • 代码设计上对模块化 / 组件化思想有一定要求

第一个 NestJs 应用

使用 NestJs 的命令行工具,可以简化项目的创建以及项目文件的创建。

  1. npm install -g @nestjs/cli安装命令行工具
  2. nest new 项目名称 初始化项目

初始化完毕后可以看到一个完整的项目结果,目录如下(忽略 node_modules):

├── README.md                       自述文件
├── nest-cli.json                   NestJs 项目配置
├── package.json                    npm 文件
├── src                             项目源码
│   ├── app.controller.spec.ts      控制器测试文件
│   ├── app.controller.ts           控制器类
│   ├── app.module.ts               模块类
│   ├── app.service.ts              服务类
│   └── main.ts                     项目入口文件
├── test                            测试目录
│   ├── app.e2e-spec.ts             应用 e2e 测试
│   └── jest-e2e.json               jest e2e 测试配置
├── tsconfig.build.json             生产环境 Typescript 所用
├── tsconfig.json                   开发环境 Typescript 配置
├── tslint.json                     tslint 配置
└── yarn.lock                       yarn 锁文件

NestJs 有几大类文件是主要的是下面几种,其他类型的文件在后续课程会讲解;

  • module 模块声明(这是 NestJs 的一个亮点,有点 DDD 的思想)
  • controller 控制器(负责接收数据,返回响应)
  • service 服务(主要业务逻辑)

使用 npm run start 来运行项目。终端输出如下:

[Nest] 2986   - 08/19/2019, 10:29 AM   [NestFactory] Starting Nest application...
[Nest] 2986   - 08/19/2019, 10:29 AM   [InstanceLoader] AppModule dependencies initialized +22ms
[Nest] 2986   - 08/19/2019, 10:29 AM   [RoutesResolver] AppController {/}: +12ms
[Nest] 2986   - 08/19/2019, 10:29 AM   [RouterExplorer] Mapped {/, GET} route +9ms
[Nest] 2986   - 08/19/2019, 10:29 AM   [NestApplication] Nest application successfully started +6ms

一般来说,看到 successfully 就可以认为启动成功了。启动失败的话可以根据错误提示进行处理,比较多的情况可能是端口占用导致的错误。

打开浏览器访问 http://localhost:3000 即可看到输出Hello World!

To Be Continued

下一期将介绍 Controller,欢迎持续关注!

退出移动版