NestJS 简介
NestJS 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架。它使用 TypeScript 编写,并结合了面向对象编程、函数式编程和函数反应式编程的元素。NestJS 构建在 Express 之上,但也可以与其他库一起使用。
原理
NestJS 的核心是模块化的架构,允许开发者将应用程序分解成多个模块,每个模块负责特定的功能。主要原理包括:
- 模块(Modules):组织代码的基本单位,类似于功能块。
- 控制器(Controllers):处理传入的请求并返回响应。
- 提供者(Providers):服务、仓库等,可以注入到控制器或其他提供者中。
- 依赖注入(Dependency Injection):通过构造函数注入依赖,提升代码的可测试性和可维护性。
基本使用方法
安装 NestJS CLI
首先,安装 NestJS CLI 工具:
bash
npm install -g @nestjs/cli
创建新项目
使用 CLI 创建一个新的 NestJS 项目:
bash
nest new project-name
项目结构
创建的项目包含以下主要文件和文件夹:
src/
:源代码目录app.module.ts
:应用程序的根模块app.controller.ts
:处理 HTTP 请求的控制器app.service.ts
:提供业务逻辑的服务
创建模块
可以使用 CLI 创建新的模块:
bash
nest generate module module-name
创建控制器
同样,可以使用 CLI 创建新的控制器:
bash
nest generate controller controller-name
创建服务
使用 CLI 创建新的服务:
bash
nest generate service service-name
使用快捷键
- nest g co book //创建一个 book 控制器
- nest g s book //创建一个 book server 服务
- nest g mo book //创建一个 book 模块
- nest g gu book //创建一个 book 守卫
- nest g in book //创建一个 book 拦截器
- nest g f book //创建一个book 过滤器
shell
name │ alias │ description │
│ application │ application │ Generate a new application workspace │
│ class │ cl │ Generate a new class │
│ configuration │ config │ Generate a CLI configuration file │
│ controller │ co │ Generate a controller declaration │
│ decorator │ d │ Generate a custom decorator │
│ filter │ f │ Generate a filter declaration │
│ gateway │ ga │ Generate a gateway declaration │
│ guard │ gu │ Generate a guard declaration │
│ interceptor │ itc │ Generate an interceptor declaration │
│ interface │ itf │ Generate an interface │
│ library │ lib │ Generate a new library within a monorepo │
│ middleware │ mi │ Generate a middleware declaration │
│ module │ mo │ Generate a module declaration │
│ pipe │ pi │ Generate a pipe declaration │
│ provider │ pr │ Generate a provider declaration │
│ resolver │ r │ Generate a GraphQL resolver declaration │
│ resource │ res │ Generate a new CRUD resource │
│ service │ s │ Generate a service declaration │
│ sub-app │ app │ Generate a new application within a monorepo
单条示例
ts
nest g co book
一次性设置一整个模块,如生成一整个book模块
ts
nest g resource book
示例代码
以下是一个简单的示例,展示如何创建一个基本的控制器和服务:
typescript
// app.controller.ts
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}
// app.service.ts
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
}
启动应用
在项目根目录下运行以下命令启动应用:
bash
npm run start
访问 http://localhost:3000
,你应该会看到 "Hello World!"。