在這組文章中,您將學(xué)習(xí) Nest的 “核心基礎(chǔ)知識(shí)”。為了讓您熟悉 Nest 應(yīng)用程序的基本構(gòu)建模塊,我們將構(gòu)建一個(gè)基本的 CRUD 應(yīng)用程序,其涵蓋了入門(mén)級(jí)別的很多功能。
我們愛(ài)上了 TypeScript,但是最重的是 - 我們熱愛(ài) Node.js。這就是為什么 Nest 同時(shí)兼容 TypeScript 和 純 JavaScript 的原因。由于 Nest 利用了編程語(yǔ)言的最新功能,因此,要將其與原始的 JavaScript 一起使用,我們需要 Babel 編譯器的協(xié)助。
我們將在提供的示例中主要使用 TypeScript,但您隨時(shí)可以 將代碼段切換為 純 JavaScript 語(yǔ)法(只需單擊每個(gè)代碼片段右上角的語(yǔ)言切換按鈕即可)。
請(qǐng)確保在您的操作系統(tǒng)上安裝了 Node.js (>= 10.13.0,v13 除外)。
使用 Nest CLI 創(chuàng)建一個(gè)新項(xiàng)目非常簡(jiǎn)單。如果已經(jīng)安裝了 npm,您可以在操作系統(tǒng)終端(或命令行)中使用以下命令創(chuàng)建一個(gè)新的 Nest 項(xiàng)目:
$ npm i -g @nestjs/cli
$ nest new project-name
將創(chuàng)建 project 木、安裝 node 模塊和其它一些模板文件,同時(shí)還將創(chuàng)建 src/ 目錄,并填充幾個(gè)核心文件。
src
app.controller.ts
app.controller.spec.ts
app.module.ts
app.service.ts
main.ts
以下是這些核心文件的簡(jiǎn)要概述:
app.controller.ts | 帶有單個(gè)路由的基本控制器。 |
app.controller.spec.ts | 針對(duì)控制器的單元測(cè)試。 |
app.module.ts | T應(yīng)用程序的根模塊(root module)。 |
app.service.ts | 具有單一方法的基本服務(wù)(service)。 method. |
main.ts | 應(yīng)用程序的入口文件,它使用核心函數(shù) NestFactory 來(lái)創(chuàng)建 Nest 應(yīng)用程序的實(shí)例。 |
main.ts 文件中包含了一個(gè)異步函數(shù),此函數(shù)將 引導(dǎo)(bootstrap) 應(yīng)用程序的啟動(dòng)過(guò)程:
@@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();
要?jiǎng)?chuàng)建一個(gè) Nest 應(yīng)用程序的實(shí)例,我們使用了 NestFactory 核心類。NestFactory 暴露了一些靜態(tài)方法用于創(chuàng)建應(yīng)用程序的實(shí)例。其中,create() 方法返回一個(gè)應(yīng)用程序的對(duì)象,該對(duì)象實(shí)現(xiàn)了 INestApplication 接口。該對(duì)象還提供了一組方法,這些方法將在接下來(lái)的章節(jié)中進(jìn)行介紹。在上面的 main.ts 示例中,我們僅啟動(dòng)了 HTTP 偵聽(tīng)器,該偵聽(tīng)器使應(yīng)用程序可以偵聽(tīng)入棧的 HTTP 請(qǐng)求。
請(qǐng)注意,使用 Nest CLI 創(chuàng)建的項(xiàng)目會(huì)擁有一個(gè)初始的項(xiàng)目結(jié)構(gòu),以鼓勵(lì)開(kāi)發(fā)人員將每個(gè)模塊保存在其專用目錄中。
Nest 的目標(biāo)是成為一個(gè)與平臺(tái)無(wú)關(guān)的框架。平臺(tái)獨(dú)立性使創(chuàng)建可重用的邏輯部分成為可能,開(kāi)發(fā)人員可以在多種不同類型的應(yīng)用程序中利用這些邏輯部分。 從技術(shù)上講,一旦創(chuàng)建了適配器,Nest 便可以使用任何 Node HTTP 框架。 目前支持兩個(gè) HTTP 平臺(tái):express 和 fastify。 您可以根據(jù)您的需求選擇最適合平臺(tái)。
platform-express | Express 是一個(gè)著名的、極簡(jiǎn)的、專為 node 開(kāi)發(fā)的 web 框架。它久經(jīng)考驗(yàn)、適用于生產(chǎn)環(huán)境的軟件庫(kù),并且擁有大量的社區(qū)資源。默認(rèn)情況下使用 @nestjs/platform-express 軟件包。許多用戶對(duì) Express 都很滿意,并且無(wú)需采取任何操作即可啟用它。 |
platform-fastify | Fastify 是一個(gè)高性能且低開(kāi)銷的框架,高度專注于提供最高的效率和速度。點(diǎn)擊 這里 查看它的使用文檔。 |
無(wú)論使用那個(gè)平臺(tái),都會(huì)將平臺(tái)的 application 接口暴露出來(lái)。它們分別是 NestExpressApplication 和 NestFastifyApplication。
當(dāng)您將類型信息傳遞給 NestFactory.create() 方法時(shí),如下例所示,app 對(duì)象將具有該特定平臺(tái)的專用方法。但是請(qǐng)注意,除非 您確實(shí)需要訪問(wèn)底層平臺(tái)的 API,否則 無(wú)需 指定平臺(tái)類型。
const app = await NestFactory.create<NestExpressApplication>(AppModule);
安裝過(guò)程完成后,您可以在操作系統(tǒng)的命令提示符下運(yùn)行以下命令,以啟動(dòng)應(yīng)用程序以偵聽(tīng)進(jìn)入的 HTTP 請(qǐng)求:
$ npm run start
此命令將使用 HTTP 服務(wù)器啟動(dòng)應(yīng)用程序,以偵聽(tīng) src/main.ts 文件中所定義的端口。應(yīng)用程序運(yùn)行后,打開(kāi)瀏覽器并訪問(wèn) http://localhost:3000/ 地址,您將看到類似 Hello World! 的信息。
更多建議: