初体验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