第一步

在这组文章中,您将学习 Nest的 “核心基础知识”。为了让您熟悉 Nest 应用程序的基本构建模块,我们将构建一个基本的 CRUD 应用程序,其涵盖了入门级别的很多功能。

编程语言

我们爱上了 TypeScript,但是最重的是 - 我们热爱 Node.js。这就是为什么 Nest 同时兼容 TypeScript 和 纯 JavaScript 的原因。由于 Nest 利用了编程语言的最新功能,因此,要将其与原始的 JavaScript 一起使用,我们需要 Babel 编译器的协助。

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

先决条件

请确保在您的操作系统上安装了 Node.js (>= 10.13.0)。

新建项目

使用 Nest CLI 创建一个新项目非常简单。如果已经安装了 npm,您可以在操作系统终端(或命令行)中使用以下命令创建一个新的 Nest 项目:

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

将创建 project 木、安装 node 模块和其它一些模板文件,同时还将创建 src/ 目录,并填充几个核心文件。

src
app.controller.ts
app.controller.spec.ts
app.module.ts
app.service.ts
main.ts

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

app.controller.ts带有单个路由的基本控制器。
app.controller.spec.ts针对控制器的单元测试。
app.module.tsT应用程序的根模块(root module)。
app.service.ts具有单一方法的基本服务(service)。 method.
main.ts应用程序的入口文件,它使用核心函数 NestFactory 来创建 Nest 应用程序的实例。

main.ts 文件中包含了一个异步函数,此函数将 引导(bootstrap) 应用程序的启动过程:

@@filename(main)
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
@@switch
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 创建的项目会拥有一个初始的项目结构,以鼓励开发人员将每个模块保存在其专用目录中。

平台

Nest 的目标是成为一个与平台无关的框架。平台独立性使创建可重用的逻辑部分成为可能,开发人员可以在多种不同类型的应用程序中利用这些逻辑部分。 从技术上讲,一旦创建了适配器,Nest 便可以使用任何 Node HTTP 框架。 目前支持两个 HTTP 平台:expressfastify。 您可以根据您的需求选择最适合平台。

platform-expressExpress 是一个著名的、极简的、专为 node 开发的 web 框架。它久经考验、适用于生产环境的软件库,并且拥有大量的社区资源。默认情况下使用 @nestjs/platform-express 软件包。许多用户对 Express 都很满意,并且无需采取任何操作即可启用它。
platform-fastifyFastify 是一个高性能且低开销的框架,高度专注于提供最高的效率和速度。点击 这里 查看它的使用文档。

无论使用那个平台,都会将平台的 application 接口暴露出来。它们分别是 NestExpressApplicationNestFastifyApplication

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

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

运行应用程序

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

$ npm run start

此命令将使用 HTTP 服务器启动应用程序,以侦听 src/main.ts 文件中所定义的端口。应用程序运行后,打开浏览器并访问 http://localhost:3000/ 地址,您将看到类似 Hello World! 的信息。