成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

【前端】嘿,Nest.js實戰開發系列之 Nest.js初體驗

開發 前端
本文主要介紹使用Nest創建的首個項目,簡要講解了創建過程,以及使用到的模塊概念。對路由、控制器、業務、模塊進行了闡述。

[[406247]]

寫在前面前面從小白視角學習了Typescript,并學習總結了ts的系列文章,希望能夠對于讀者有所幫助。至于學習了TS基礎后,如何進行開發實踐,本系列將結合Nest.js的Node服務器框架進行娓娓道來。

  • Nest (NestJS) 是一個用于構建高效、可擴展的Node.js服務器端應用程序的框架。它使用漸進式 JavaScript,使用TypeScript構建并完全支持(但仍然允許開發人員使用純 JavaScript 進行編碼)并結合了 OOP(面向對象編程)、FP(函數式編程)和 FRP(函數式響應式編程)的元素。

Nest使用了功能強大的HTTP Server框架,默認支持Express框架,其是簡單易上手的。Nest是在Express上進行抽象而成的,結合TS強大的語言體系實現高效快捷開發。

Nest是筆者繼接觸Express框架后感興趣的Node框架,對此還是比較熟悉的,選擇Nest也就簡單易行。截止到筆者發布文章的時候,Github上Nest擁有37.7K個Stat,足以證明其受青睞程度。

Nest 提供開箱即用的應用程序架構,允許開發人員和團隊創建高度可測試、可擴展、松散耦合且易于維護的應用程序。該架構深受 Angular 的啟發。

項目創建

開發環境

在項目開展前,先行介紹下開發環境:

  • node.js:14.15.1
  • typescript:3.8.3
  • nest.js:7.6.15

先決條件請確保您的操作系統上安裝了Node.js(>= 10.13.0,v13 除外)。

創建項目

要使用 Nest cli創建項目,先得安裝相關腳手架,運行下列命令創建第一個Nest項目。

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

當然也可以使用yarn命令進行創建:

  1. $ yarn add @nest/cli 
  2. $ nest new project-name 

在輸入完上述命令后,得到以下內容:

  1. G:\Code>nest new nest-test 
  2. ⚡  We will scaffold your app in a few seconds.. 
  3.  
  4. CREATE nest-test/.eslintrc.js (631 bytes) 
  5. CREATE nest-test/.prettierrc (51 bytes) 
  6. CREATE nest-test/nest-cli.json (64 bytes) 
  7. CREATE nest-test/package.json (1971 bytes) 
  8. CREATE nest-test/README.md (3339 bytes) 
  9. CREATE nest-test/tsconfig.build.json (97 bytes) 
  10. CREATE nest-test/tsconfig.json (339 bytes) 
  11. CREATE nest-test/src/app.controller.spec.ts (617 bytes) 
  12. CREATE nest-test/src/app.controller.ts (274 bytes) 
  13. CREATE nest-test/src/app.module.ts (249 bytes) 
  14. CREATE nest-test/src/app.service.ts (142 bytes) 
  15. CREATE nest-test/src/main.ts (208 bytes) 
  16. CREATE nest-test/test/app.e2e-spec.ts (630 bytes) 
  17. CREATE nest-test/test/jest-e2e.json (183 bytes) 
  18.  
  19. ? Which package manager would you ❤️  to use? yarn 
  20. ▹▹▹▸▹ Installation in progress... ☕ 

上述所示,會詢問你選擇yarn還是npm進行包管理,筆者此處選擇的是yarn。

  1. 🚀  Successfully created project nest-test 
  2. 👉  Get started with the following commands: 
  3.  
  4. $ cd nest-test 
  5. $ yarn run start 
  6.  
  7.  
  8.                           Thanks for installing Nest 🙏 
  9.                  Please consider donating to our open collective 
  10.                         to help us maintain this package. 
  11.  
  12.  
  13.                🍷  Donate: https://opencollective.com/nest 

經歷過歲月靜好,電腦后臺已經為我們負重前行,最終創建成功。

根據上述提示,我們進入項目進行操作,項目目錄如下所示:

運行yarn start或npm run start后執行運行項目,啟動項目服務。

此時,在瀏覽器地址欄輸入http://localhost:3000即可看到hello world。

 

詳情介紹

路由

當打開src目錄下main.ts文件時,看到@Controller()裝飾器中使用路由前綴可以更方便地進行路由分組,最大程度減少代碼重復。

main.ts

  1. import { NestFactory } from '@nestjs/core'
  2. import { AppModule } from './app.module'
  3.  
  4. async function bootstrap() { 
  5.   const app = await NestFactory.create(AppModule);//表示使用nest的工廠函數創建了AppModule 
  6.   await app.listen(3000);//表示項目監聽的端口是3000 
  7. bootstrap(); 

控制器是控制傳入的請求返回到客戶端的顯示內容,當然也可以進行添加指定的路由。我們可以在app.controller.ts文件中添加以下代碼:

  1. @Get("/home"
  2. getHome(): string { 
  3.   return "my home"

運行得到:

設置局部路由前綴

路由還可以設置局部和全局的前綴,使用前綴可以避免在所有路由共享通用前綴時出現沖突的情況。

在@Controller()寫入best,可以表示當前文件中所有路由設置前綴best。如下所示:

  1. @Controller("best"
  2. export class AppController { 
  3.   constructor(private readonly appService: AppService) {} 
  4.  
  5.   @Get() 
  6.   getHello(): string { 
  7.     return this.appService.getHello(); 
  8.   } 

運行結果:

設置全局路由前綴

可以在main.ts文件中添加app.setGlobalPrefix()設置全局路由前端:

  1. app.setGlobalPrefix('nest-test'); // 全局路由前綴 

運行結果:

controller控制器

控制器負責處理傳入的請求并將響應返回給客戶端。控制器的目的是接收應用程序的特定請求。在路由該控制器接收哪些請求機構的控制。很多時候,每個控制器有多個路由,不同的路由可以執行不同的動作。


為創建一個基本的控制器,我們使用類和裝飾器。裝飾器將類與所需的元數據相關聯,并使 Nest 能夠創建路由映射(將請求綁定到相應的控制器)。

app.controller.ts

  1. import { Controller, Get } from '@nestjs/common'
  2. import { AppService } from './app.service'
  3.  
  4. @Controller() 
  5. export class AppController { 
  6.   constructor(private readonly appService: AppService) {} 
  7.  
  8.   @Get() 
  9.   getHello(): string { 
  10.     return this.appService.getHello(); 
  11.   } 

同樣的,我們可以使用命令進行創建新的控制器模塊,便于對項目的管理。

  1. $ nest g controller users 

此時在src中生成了users目錄文件:

初始化的controller文件如下:

users.controller.ts

  1. import { Controller } from '@nestjs/common'
  2.  
  3. @Controller('users'
  4. export class UsersController {} 

Services業務

我們看到前面controller文件中,可以實現簡單業務邏輯的處理,但是在實際開發中應當將控制器和業務進行分開,對代碼進行解耦。

  1. $ nest g service users 

此時在src中的users目錄下生成了業務文件:

users.service.ts

  1. import { Injectable } from '@nestjs/common'
  2.  
  3. @Injectable() 
  4. export class UsersService { 
  5.   // 添加用戶的業務邏輯 
  6.   addUser(username: string, password: string): string{ 
  7.     console.log(`create user:username--${username} password--${password}`); 
  8.      
  9.     return "add user success"
  10.   } 

users.controller.ts

  1. import { Body, Controller, Post } from '@nestjs/common'
  2. import { UsersService }from "./users.service"
  3. @Controller('users'
  4. export class UsersController { 
  5.   constructor(private readonly usersService: UsersService) {}//Nest 是圍繞通常稱為依賴注入的強大設計模式構建的。Nest 將UsersService通過創建并返回一個實例usersService。 
  6.    
  7.   @Post("add"
  8.   addUser(@Body() body){ 
  9.     return this.usersService.addUser(body.username,body.password); 
  10.   } 

使用postman進行模擬用戶請求,運行結果如下:

Module模塊

模塊是用@Module()裝飾器注釋的類,@Module()裝飾器提供元數據利用的組織應用程序結構。


每個應用程序至少有一個模塊和一個根模塊。根模塊是 Nest 用于構建應用程序圖的起點- Nest 用于解析模塊和提供者關系和依賴關系的內部數據結構。雖然理論上非常小的應用程序可能只有根模塊,但這不是典型情況。我們要強調的是,強烈推薦使用模塊作為組織組件的有效方式。因此,對于大多數應用程序,最終的架構將采用多個模塊,每個模塊封裝一組密切相關的功能。

所述@Module()裝飾采用單個對象,其屬性描述該模塊:

我們看到上面創建的Service和Controller是如何進行訪問運行的呢?

打開app.modelu.ts 可以看到:

  1. import { Module } from '@nestjs/common'
  2. import { AppController } from './app.controller'
  3. import { AppService } from './app.service'
  4. import { UsersController } from './users/users.controller'
  5. import { UsersService } from './users/users.service'
  6.  
  7. @Module({ 
  8.   imports: [], 
  9.   controllers: [AppController, UsersController], 
  10.   providers: [AppService, UsersService], 
  11. }) 
  12. export class AppModule {} 

在我們創建了子模塊后,創建了UsersController和UsersService,即使不新建module文件也能通過路由訪問,因為系統會自動添加到app.module.ts文件中。

當然,我們也可以根據需求進行創建子模塊的module文件,只需要執行下列命令即可:

  1. $ nest g module users 

此時看到生成了module子模塊文件:

初始化的文件如下所示:

  1. import { Module } from '@nestjs/common'
  2.  
  3. @Module({}) 
  4. export class UsersModule {} 

此時需要將users模塊的UsersController和UsersService組裝到module文件中。這樣,其他module模塊想要引入Users模塊時,不需要同時Controller和Service了,方便對本模塊進行管理。

  1. import { Module } from '@nestjs/common'
  2. import { UsersController } from './users.controller'
  3. import { UsersService } from './users.service'
  4.  
  5. @Module({ 
  6.   imports: [UsersModule], 
  7.   controllers: [UsersController], 
  8.   providers: [UsersService], 
  9. }) 
  10. export class UsersModule {} 

當然,需要對app.module.ts文件進行修改,因為子模塊已經引入了Controller和Service了。

  1. import { Module } from '@nestjs/common'
  2. import { AppController } from './app.controller'
  3. import { AppService } from './app.service'
  4. // import { UsersController } from './users/users.controller'
  5. // import { UsersService } from './users/users.service'
  6. import { UsersModule } from './users/users.module'
  7.  
  8. @Module({ 
  9.   imports: [UsersModule], 
  10.   controllers: [AppController], 
  11.   providers: [AppService], 
  12. }) 
  13. export class AppModule {} 

小結

本文主要介紹使用Nest創建的首個項目,簡要講解了創建過程,以及使用到的模塊概念。對路由、控制器、業務、模塊進行了闡述,后續概念會進行詳細講解,更詳細的請見官方文檔。

 

責任編輯:姜華 來源: 前端萬有引力
相關推薦

2021-06-29 06:25:22

Nest.jsTypeORM數據庫

2022-03-18 21:51:10

Nest.jsAOP 架構后端

2022-02-02 20:21:24

短信驗證碼登錄

2021-12-22 06:56:06

MySQCrudjs

2022-03-02 14:00:46

Nest.jsExpress端口

2024-05-06 08:48:18

nestjava?MVC?

2022-12-27 09:22:06

Nest.js框架

2024-02-04 19:15:09

Nest.js管理項目

2021-10-28 17:40:22

Nest.js前端代碼

2024-05-21 10:35:34

2021-12-27 20:29:21

機制PipeExceptionFi

2023-01-30 09:01:34

DecoratorsJS語法

2024-03-15 09:26:59

2011-11-01 10:30:36

Node.js

2016-11-01 19:10:33

vue.js前端前端框架

2020-09-28 06:57:39

Node.jsGraphQLAPI

2009-06-09 13:52:58

Bing API體驗

2021-12-24 16:55:44

前端開發JavaScript

2020-04-20 16:00:05

Node.js框架JavaScript

2011-06-24 11:03:31

Qt 多線程 線程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产伦精品一区二区三毛 | 国产日韩一区二区三区 | 狠狠躁夜夜躁人人爽天天高潮 | 成人亚洲在线 | 嫩草影院网址 | 日韩国产三区 | 男女污污动态图 | 中文精品视频 | 中文字幕亚洲精品 | 日韩中文字幕在线播放 | 午夜激情视频 | 欧美一区在线视频 | a爱视频| 日韩欧美第一页 | 久草a√| 国产日韩一区二区 | 久久er99热精品一区二区 | 精品欧美一区二区三区精品久久 | 中文在线a在线 | 精品国产1区2区3区 在线国产视频 | 国产激情视频在线免费观看 | a级大片免费观看 | 午夜免费影视 | 在线激情视频 | 另类专区成人 | 国产美女h视频 | 午夜精品久久久久久不卡欧美一级 | av在线播放网 | 国产精品入口麻豆www | 三级在线免费 | 欧美一级片 | 永久看片| 日韩精品一区二区三区在线观看 | 中文字幕第十页 | 国产欧美精品一区二区色综合朱莉 | 久久久久国产精品一区 | 亚洲欧美日韩国产综合 | 怡红院免费的全部视频 | 国产美女久久 | 一级做a爰片久久毛片免费看 | 国产精品美女一区二区 |