# 介紹
Nest (NestJS) 是一個用于構建高效、可擴展的[Node.js](https://nodejs.org/)服務器端應用程序的框架。它使用漸進式 JavaScript,使用 TypeScript 構建并完全支持[TypeScript](http://www.typescriptlang.org/)(但仍允許開發人員使用純 JavaScript 進行編碼),并結合了 OOP(面向對象編程)、FP(函數式編程)和 FRP(函數式反應式編程)的元素。
在底層,Nest 使用了強大的 HTTP 服務器框架,比如[Express](https://expressjs.com/)(默認),并且可以選擇配置為使用[Fastify](https://github.com/fastify/fastify)!
Nest 在這些常見的 Node.js 框架(Express/Fastify)之上提供了一個抽象層級,但也將它們的 API 直接暴露給開發人員。這使開發人員可以自由使用可用于底層平臺的無數第三方模塊。
# 理念[#](https://docs.nestjs.com/#philosophy)
近年來,由于 Node.js,JavaScript 已成為前端和后端應用程序的網絡“通用語”。這催生了[Angular](https://angular.io/)、[React](https://github.com/facebook/react)和[Vue](https://github.com/vuejs/vue)等很棒的項目,它們提高了開發人員的工作效率,并支持創建快速、可測試和可擴展的前端應用程序。然而,雖然 Node(和服務器端 JavaScript)存在大量出色的庫、幫助程序和工具,但它們都沒有有效地解決**架構**的主要問題。
Nest 提供了一個開箱即用的應用程序架構,允許開發人員和團隊創建高度可測試、可擴展、松散耦合且易于維護的應用程序。該架構深受 Angular 的啟發。
# 安裝[#](https://docs.nestjs.com/#installation)
首先,您可以使用[Nest CLI](https://docs.nestjs.com/cli/overview)構建項目,或者克隆一個啟動項目(兩者都會產生相同的結果)。
要使用 Nest CLI 構建項目,請運行以下命令。這將創建一個新的項目目錄,并使用初始核心 Nest 文件和支持模塊填充該目錄,為您的項目創建一個常規的基礎結構。建議初次使用的用戶使用**Nest CLI**創建新項目。我們將在[第一步](https://docs.nestjs.com/first-steps)中繼續使用這種方法。
~~~bash
$ npm i -g @nestjs/cli
$ nest new project-name
~~~
#### 替代方案 [#](https://docs.nestjs.com/#alternatives)
或者,使用**Git**安裝 TypeScript 啟動項目:
~~~bash
$ git clone https://github.com/nestjs/typescript-starter.git project
$ cd project
$ npm install
$ npm run start
~~~
> **提示**:如果您想克隆沒有 git 歷史記錄的存儲庫,可以使用[degit](https://github.com/Rich-Harris/degit)。
打開瀏覽器并導航到[`http://localhost:3000/`](http://localhost:3000/).
要安裝啟動項目的 JavaScript 風格,請在上面的命令行中使用`javascript-starter.git`。
**您還可以通過使用npm**(或**yarn**)安裝核心和支持文件來從頭開始手動創建新項目。當然,在這種情況下,您將負責自己創建項目樣板文件。
~~~bash
$ npm i --save @nestjs/core @nestjs/common rxjs reflect-metadata
~~~
- 介紹
- 概述
- 第一步
- 控制器
- 提供者
- 模塊
- 中間件
- 異常過濾器
- 管道
- 守衛
- 攔截器
- 自定義裝飾器
- 基礎知識
- 自定義提供者
- 異步提供者
- 動態模塊
- 注入作用域
- 循環依賴
- 模塊參考
- 懶加載模塊
- 應用上下文
- 生命周期事件
- 跨平臺
- 測試
- 技術
- 數據庫
- 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?