### 第一步
在這組文章中,您將了解 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?