初体验Nest.js

Nest (NestJS) 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的开发框架。它利用 JavaScript 的渐进增强的能力,使用并完全支持 TypeScript (仍然允许开发者使用纯 JavaScript 进行开发),并结合了 OOP (面向对象编程)、FP (函数式编程)和 FRP (函数响应式编程)。
在底层,Nest 构建在强大的 HTTP 服务器框架上,例如 Express (默认),并且还可以通过配置从而使用 Fastify !
Nest 在这些常见的 Node.js 框架 (Express/Fastify) 之上提高了一个抽象级别,但仍然向开发者直接暴露了底层框架的 API。这使得开发者可以自由地使用适用于底层平台的无数的第三方模块。
开始之前,你可以使用 Nest CLI 创建项目,也可以克隆一个 starter project(两者的结果是一样的)。
警告
请确保在您的操作系统上安装了 Node.js (>= 10.13.0,v13 除外)。
首先创建一个全新的nestjs项目
# 全局安装
npm i -g @nestjs/cli
# 创建项目
nest new project-name
# 启动
npm run start:dev
# 打包
npm run build这样,一个全新的nestjs项目就创建成功了

此时,打开浏览器并导航到 http://localhost:3000/ 地址。
src目录简介
app.controller.ts | 带有单个路由的基本控制器。 |
|---|---|
app.controller.spec.ts | 针对控制器的单元测试。 |
app.module.ts | T应用程序的根模块(root module)。 |
app.service.ts | 具有单一方法的基本服务(service)。 method. |
main.ts | 应用程序的入口文件,它使用核心函数 NestFactory 来创建 Nest 应用程序的实例。 |
说名
app.service.ts 主要用类来书写业务逻辑app.controller.ts 主要用来规划路由实现方式
简单修改
删除根目录下的test文件夹(测试文件,删掉即可)
进入src目录,删除
app.controller.spec.ts文件(测试文件,删掉即可)修改
app.controller.ts文件,在@Controller()装饰器里添加api变成@Controller("api"),此时,打开浏览器并导航到http://localhost:3000/api/地址。在此基础上进行修改,在
@Get()装饰器里增加v1变成Get("v1"),此时,打开浏览器并导航到http://localhost:3000/api/v1/地址。import { Controller, Get } from '@nestjs/common' import { AppService } from './app.service' @Controller('api') export class AppController { constructor(private readonly appService: AppService) {} @Get('v1') getHello(): string { return this.appService.getHello() } }现在,我们把
app.service.ts文件修改,如下:此时,打开浏览器并导航到http://localhost:3000/api/v1/地址。import { Injectable } from '@nestjs/common' @Injectable() export class AppService { getHello(): string { return 'Hello 12345678910' } }新增一个
v2接口,访问http://localhost:3000/api/v2/地址。import { Controller, Get } from '@nestjs/common' import { AppService } from './app.service' @Controller('api') export class AppController { constructor(private readonly appService: AppService) {} @Get('v1') getHello(): string { return this.appService.getHello() } @Get('v2') getHi(): string { return this.appService.getHi() } }import { Injectable } from '@nestjs/common' @Injectable() export class AppService { getHello(): string { return 'Hello World!' } getHi(): string { return 'Hi World!' } }通过以上操作不难发现,
controller层主要控制路由等相关操作,而service层则是具体的业务逻辑。
语法检查和格式化
为了确保最大的稳定性和可扩展性,我们使用基础 eslint 和 prettier cli 软件包。 此设置允许 IDE 在设计上与官方扩展完美集成。
对于 IDE 不相关的无头环境(持续集成、Git 钩子等),Nest 项目附带了即用型 npm 脚本。
# 语法检查
npm run lint
# 格式化
npm run format至此,本章节的学习就到此结束了,如有疑惑,可对接技术客服进行相关咨询。