第一步

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

语言#

我们爱上了 TypeScript,但最重要的是 - 我们爱 Node.js。这就是 Nest 与 TypeScript 和纯 JavaScript 兼容的原因。Nest 利用了最新的语言特性,因此要将它与普通的 JavaScript 一起使用,我们需要一个 Babel 编译器。

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

先决条件#

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

设置#

使用 Nest 命令行接口 设置新项目非常简单。安装 npm 后,你可以在操作系统终端中使用以下命令创建一个新的 Nest 项目:

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

提示 要使用 TypeScript 的 更严格 功能集创建新项目,请将 --strict 标志传递给 nest new 命令。

将创建 project-name 目录,安装 node 模块和一些其他样板文件,将创建 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 包含一个异步函数,它将引导我们的应用:

main.ts

JS

1
import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); await app.listen(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.js 极简 Web 框架。这是一个经过实战检验、可用于生产的库,其中包含社区实现的大量资源。默认使用 @nestjs/platform-express 包。许多用户使用 Express 得到了很好的服务,不需要采取任何操作来启用它。
platform-fastifyFastify 是一个高性能和低开销的框架,高度专注于提供最大的效率和速度。在 此处 阅读如何使用它。

无论使用哪个平台,它都会公开自己的应用接口。这些分别被视为 NestExpressApplicationNestFastifyApplication

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

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

运行应用#

安装过程完成后,你可以在操作系统命令提示符下运行以下命令以启动应用监听入站 HTTP 请求:

1
$ npm run start

提示 为了加快开发过程(构建速度加快 20 倍),你可以通过将 -b swc 标志传递给 start 脚本来使用 SWC 构建器,如下所示 npm run start -- -b swc

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

要监视文件中的更改,你可以运行以下命令来启动应用:

1
$ npm run start:dev

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

语法检查和格式化#

CLI 尽最大努力构建可靠的大规模开发工作流程。因此,生成的 Nest 项目预装了代码 linter 和格式化程序(分别为 eslintprettier)。

提示 不确定格式化程序与 linter 的作用?在 此处 了解区别。

为了确保最大的稳定性和可扩展性,我们使用基础 eslintprettier cli 软件包。此设置允许 IDE 在设计上与官方扩展完美集成。

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

1
# Lint and autofix with eslint $ npm run lint # Format with prettier $ npm run format