### 第一步
在这组文章中,您将了解 Nest 的**核心基础知识**。为了熟悉 Nest 应用程序的基本构建块,我们将构建一个基本的 CRUD 应用程序,其功能涵盖了很多入门级的基础。
#### 语言[#](#language)
我们爱上了[TypeScript](https://www.typescriptlang.org/),但最重要的是——我们爱[Node.js。](https://nodejs.org/en/)这就是 Nest 兼容 TypeScript 和**纯 JavaScript**的原因。Nest 利用了最新的语言特性,因此要将它与 `vanilla JavaScript` 一起使用,我们需要一个[Babel](https://babeljs.io/)编译器。
我们将在我们提供的示例中主要使用 TypeScript,但您始终可以**将代码片段切换为原生**JavaScript 语法(只需单击以切换每个片段右上角的语言按钮)。
#### 先决条件[#](#prerequisites)
请确保您的操作系统上安装了[Node.js (>= 10.13.0,v13 除外)。](https://nodejs.org/)
#### 设置[#](#setup)
[使用Nest CLI](https://docs.nestjs.com/cli/overview)设置新项目非常简单。[安装npm](https://www.npmjs.com/)后,您可以在 OS 终端中使用以下命令创建一个新的 Nest 项目:
~~~bash
$ npm i -g @nestjs/cli
$ nest new project-name
~~~
该`project-name`目录将被创建,节点模块和一些其他模板文件将被安装,并且`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 \*/
~~~typescript
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 搭建的项目会创建一个初始项目结构,鼓励开发人员遵循将每个模块保存在其自己的专用目录中的约定。
#### 平台[#](#platform)
Nest 旨在成为一个与平台无关的框架。平台独立性使得创建可重用的逻辑部分成为可能,开发人员可以在多种不同类型的应用程序中利用这些部分。从技术上讲,一旦创建了适配器,Nest 就能够与任何 Node HTTP 框架一起工作。有两种开箱即用的 HTTP 平台支持:[express](https://expressjs.com/)和[fastify](https://www.fastify.io/)。您可以选择最适合您需求的一种。
platform-expressExpress是一个著名的 Node.js 极简 Web 框架。这是一个经过实战考验、可用于生产的库,其中包含由社区实施的大量资源。@nestjs/platform-express默认使用该包。许多用户都可以很好地使用 Express,并且无需采取任何措施来启用它。platform-fastifyFastify是一个高性能和低开销的框架,高度专注于提供最大的效率和速度。在此处阅读如何使用它。
无论使用哪个平台,它都会公开自己的应用程序接口。这些分别被视为`NestExpressApplication`和`NestFastifyApplication`。
当您将类型传递给`NestFactory.create()`方法时,如下例所示,该`app`对象将具有专门用于该特定平台的方法。但是请注意,**除非**您确实想要访问底层平台 API,否则您**不需要**指定类型。
```typescript
const app = await NestFactory.create<NestExpressApplication>(AppModule);
```
#### 运行应用程序[#](#running-the-application)
安装过程完成后,您可以在操作系统命令提示符处运行以下命令来启动应用程序以侦听入站 HTTP 请求:
~~~bash
$ npm run start
~~~
此命令使用 HTTP 服务器在文件中定义的端口上侦听启动应用程序`src/main.ts`。应用程序运行后,打开浏览器并导航到`http://localhost:3000/`.您应该看到该`Hello World!`消息。
要查看文件中的更改,您可以运行以下命令来启动应用程序:
~~~bash
$ npm run start:dev
~~~
此命令将监视您的文件,自动重新编译和重新加载服务器。
- 介绍
- 概述
- 第一步
- 控制器
- 提供者
- 模块
- 中间件
- 异常过滤器
- 管道
- 守卫
- 拦截器
- 自定义装饰器
- 基础知识
- 自定义提供者
- 异步提供者
- 动态模块
- 注入作用域
- 循环依赖
- 模块参考
- 懒加载模块
- 应用上下文
- 生命周期事件
- 跨平台
- 测试
- 技术
- 数据库
- Mongo
- 配置
- 验证
- 缓存
- 序列化
- 版本控制
- 定时任务
- 队列
- 日志
- Cookies
- 事件
- 压缩
- 文件上传
- 流式处理文件
- HTTP模块
- Session(会话)
- MVC
- 性能(Fastify)
- 服务器端事件发送
- 安全
- 认证(Authentication)
- 授权(Authorization)
- 加密和散列
- Helmet
- CORS(跨域请求)
- CSRF保护
- 限速
- GraphQL
- 快速开始
- 解析器(resolvers)
- 变更(Mutations)
- 订阅(Subscriptions)
- 标量(Scalars)
- 指令(directives)
- 接口(Interfaces)
- 联合类型
- 枚举(Enums)
- 字段中间件
- 映射类型
- 插件
- 复杂性
- 扩展
- CLI插件
- 生成SDL
- 其他功能
- 联合服务
- 迁移指南
- Websocket
- 网关
- 异常过滤器
- 管道
- 守卫
- 拦截器
- 适配器
- 微服务
- 概述
- Redis
- MQTT
- NATS
- RabbitMQ
- Kafka
- gRPC
- 自定义传输器
- 异常过滤器
- 管道
- 守卫
- 拦截器
- 独立应用
- Cli
- 概述
- 工作空间
- 库
- 用法
- 脚本
- Openapi
- 介绍
- 类型和参数
- 操作
- 安全
- 映射类型
- 装饰器
- CLI插件
- 其他特性
- 迁移指南
- 秘籍
- CRUD 生成器
- 热重载
- MikroORM
- TypeORM
- Mongoose
- 序列化
- 路由模块
- Swagger
- 健康检查
- CQRS
- 文档
- Prisma
- 静态服务
- Nest Commander
- 问答
- Serverless
- HTTP 适配器
- 全局路由前缀
- 混合应用
- HTTPS 和多服务器
- 请求生命周期
- 常见错误
- 实例
- 迁移指南
- 发现
- 谁在使用Nest?