Skip to content

第一步

在这组文章中,你将学习 Nest 的核心基础知识。为了熟悉 Nest 应用的基本构建块,我们将构建一个基础的 CRUD 应用,其功能在入门级别上涵盖了大量内容。

语言

我们热爱 TypeScript,但最重要的是——我们热爱 Node.js。这就是为什么 Nest 同时兼容 TypeScript 和纯 JavaScript。Nest 利用了最新的语言特性,因此要将其与原生 JavaScript 一起使用,我们需要一个 Babel 编译器。

我们在提供的示例中主要使用 TypeScript,但你始终可以将代码片段切换为原生 JavaScript 语法(只需点击每个代码片段右上角的语言切换按钮)。

前置条件

请确保你的操作系统上已安装 Node.js(版本 >= 20)。

设置

使用 Nest CLI 设置新项目非常简单。安装了 npm 后,你可以在终端中使用以下命令创建新的 Nest 项目:

bash
$ npm i -g @nestjs/cli
$ nest new project-name

提示

要创建一个具有 TypeScript 更严格特性集的新项目,请在 nest new 命令中传入 --strict 标志。

将创建 project-name 目录,安装 node modules 和一些其他样板文件,并创建一个 src/ 目录,其中包含几个核心文件。

src
├── app.controller.spec.ts
├── app.controller.ts
├── app.module.ts
├── app.service.ts
└── main.ts

以下是这些核心文件的简要概述:

app.controller.ts一个包含单个路由的基本控制器。
app.controller.spec.ts控制器的单元测试。
app.module.ts应用的根模块。
app.service.ts一个包含单个方法的基本服务。
main.ts应用的入口文件,使用核心函数 NestFactory 创建 Nest 应用实例。

main.ts 包含一个异步函数,用于引导我们的应用:

typescript
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(process.env.PORT ?? 3000);
}
bootstrap();

要创建 Nest 应用实例,我们使用核心的 NestFactory 类。NestFactory 暴露了几个静态方法,用于创建应用实例。create() 方法返回一个应用对象,该对象实现了 INestApplication 接口。这个对象提供了一组方法,将在后续章节中描述。在上面的 main.ts 示例中,我们只是启动了 HTTP 监听器,让应用等待入站 HTTP 请求。

请注意,使用 Nest CLI 搭建的项目会创建一个初始项目结构,鼓励开发者遵循将每个模块保存在其专用目录中的约定。

提示

默认情况下,如果在创建应用时发生任何错误,你的应用将以代码 1 退出。如果你想让它抛出错误,请禁用 abortOnError 选项(例如,NestFactory.create(AppModule, { abortOnError: false }))。

平台

Nest 旨在成为一个平台无关的框架。平台独立性使得创建可复用的逻辑部分成为可能,开发者可以在多种不同类型的应用中利用这些逻辑。从技术上讲,一旦创建了适配器,Nest 就能与任何 Node HTTP 框架配合工作。目前开箱即用地支持两个 HTTP 平台:expressfastify。你可以选择最适合你需求的平台。

platform-expressExpress 是一个著名的 Node 极简 Web 框架。它是一个经过实战检验的生产就绪库,社区实现了大量资源。默认使用 @nestjs/platform-express 包。许多用户使用 Express 就能很好地满足需求,无需采取任何操作即可启用它。
platform-fastifyFastify 是一个高性能、低开销的框架,高度专注于提供最大的效率和速度。在这里阅读如何使用它。

无论使用哪个平台,它都会暴露自己的应用接口。它们分别是 NestExpressApplicationNestFastifyApplication

当你向 NestFactory.create() 方法传递类型时(如下例所示),app 对象将拥有该特定平台独有的方法。但请注意,除非你确实想要访问底层平台 API,否则不需要指定类型。

typescript
const app = await NestFactory.create<NestExpressApplication>(AppModule);

运行应用

安装过程完成后,你可以在终端中运行以下命令来启动应用,监听入站 HTTP 请求:

bash
$ npm run start

提示

要加速开发过程(构建速度提升 20 倍),你可以通过向 start 脚本传递 -b swc 标志来使用 SWC 构建器,如 npm run start -- -b swc

此命令启动应用,HTTP 服务器监听 src/main.ts 文件中定义的端口。应用运行后,打开浏览器并访问 http://localhost:3000/。你应该会看到 Hello World! 消息。

要监听文件变化,你可以运行以下命令来启动应用:

bash
$ npm run start:dev

此命令将监听你的文件,自动重新编译并重新加载服务器。

代码检查和格式化

CLI 尽最大努力在规模化开发中搭建可靠的开发工作流。因此,生成的 Nest 项目预装了代码检查工具格式化工具(分别是 eslintprettier)。

提示

不确定格式化工具和检查工具的区别?在这里了解。

为了确保最大的稳定性和可扩展性,我们使用基础的 eslintprettier CLI 包。这种设置允许通过设计与官方扩展进行整洁的 IDE 集成。

对于 IDE 不相关的无头环境(持续集成、Git hooks 等),Nest 项目附带了开箱即用的 npm 脚本。

bash
# 使用 eslint 检查并自动修复
$ npm run lint

# 使用 prettier 格式化
$ npm run format

基于 NestJS 官方文档翻译