1.什么事nest.js
個(gè)人覺得在使用nest.js之前還是需要了解下什么是nest.js,才能在后邊有個(gè)指導(dǎo)思想荧关,幫助我們更快的學(xué)習(xí)市袖。
nest(Nestjs)是基于express的HTP服務(wù)器框架上古戴,還可以通過配置使用fastify的構(gòu)建田弥,完全支持TypeScript, 結(jié)合OOP(面向?qū)ο螅? FP(函數(shù)式編程) 和 FRP(函數(shù)響應(yīng)式編程)逞带。
2.nest安裝
npm i -g @nest/cli (現(xiàn)在應(yīng)該都知道什么是npm了吧)
nest new project-name(項(xiàng)目名稱) (這里需要說明就是框架也提供了yarn的方式饮睬,使用那種根據(jù)自己的愛好來就好)
下面就是nest項(xiàng)目的目錄3.nest執(zhí)行
cd project-name
npm install
npm run start:dev(測(cè)試)
npm run start:debug(開發(fā))
npm run start:prod(生產(chǎn))
npm run start(啟動(dòng))
以上就是nest啟動(dòng)的基本命令租谈,啟動(dòng)成功,訪問3000端口捆愁,即可看到 “hello world”
這樣一個(gè)nest的基礎(chǔ)項(xiàng)目就創(chuàng)建完成了割去,是不是很快呢。昼丑。哈哈
4.項(xiàng)目基本構(gòu)成
nest生成的都在src這個(gè)目錄下呻逆,直接上圖吧main 為入口文件,創(chuàng)建app實(shí)例
module 創(chuàng)建依賴關(guān)系,完成對(duì)應(yīng)的Controller, Provider的加載菩帝,完成應(yīng)用的啟動(dòng)
service 定義一個(gè)Provider咖城,服務(wù)的提供者
controller 控制器憔足,定義路由和數(shù)據(jù)的返回關(guān)系
以上就是個(gè)完整的項(xiàng)目了,但是這和開發(fā)應(yīng)用還有一定的差距酒繁。哪又如何開發(fā)我們對(duì)應(yīng)的應(yīng)用呢滓彰??
先學(xué)習(xí)幾個(gè)nest幾個(gè)簡(jiǎn)單的創(chuàng)建應(yīng)用目錄的命令吧
nest g co/controller name 創(chuàng)建控制器
nest g mo/module name 創(chuàng)建模塊
nest g s/service name 創(chuàng)建服務(wù)模塊
nest g lib/library name. 創(chuàng)建新庫(kù)
使用以上這幾個(gè)命令就能愉快的創(chuàng)建自己的文件了州袒,但是新的問題又來了揭绑,如何使用我們創(chuàng)建的文件呢?郎哭?我們從controller -> module -> service 這樣的順序?qū)崿F(xiàn)個(gè)簡(jiǎn)單的接口他匪。
nest g co user
nest g s user
執(zhí)行命令實(shí)現(xiàn)user的controller和service, 使用命令框架會(huì)自動(dòng)載入文件,命令結(jié)束后就能看到src下多了個(gè)user的目錄了,包含了controller和serivce。
如何使用模塊呢夸研?邦蜜?
nest g mo user
模塊是為了更好的聚合我們的功能,將同一個(gè)應(yīng)用程序移動(dòng)到一個(gè)功能模塊下亥至。再創(chuàng)建控制器和服務(wù)service悼沈。控制器和服務(wù)就能直接被注入到模塊姐扮;
import { Module } from '@nestjs/common';
import { UserController } from './user.controller';
import { UserService } from './user.service';
@Module({
controllers: [UserController],
providers: [UserService]
})
export class UserModule {}
在nest的模塊中有@module() 的裝飾器描述對(duì)象的屬性:
屬性 | 解釋 |
---|---|
provoders | nest注入器實(shí)例化提供者絮供,至少在整合模塊內(nèi)共享 |
controllers | 控制器 |
imports | 導(dǎo)入當(dāng)前模塊需要服務(wù)的提供者的模塊 |
exports | 到處模塊,對(duì)其他模塊提供服務(wù) |
然后就可以在控制器和服務(wù)中創(chuàng)建應(yīng)用了茶敏。
//controller
import { Controller, Get } from '@nestjs/common';
import { UserService } from './user.service';
@Controller('user')
export class UserController {
constructor(private readonly UserService: UserService){}
@Get('list')
userList(): String {
return this.UserService.userList();
}
}
//service
import { Injectable } from '@nestjs/common';
@Injectable()
export class UserService {
userList(){
return 'userlist';
}
}
訪問 localhost:3000/user/list 就能看到結(jié)果壤靶,以上就是創(chuàng)建簡(jiǎn)單應(yīng)用的步驟,這也僅僅是簡(jiǎn)單的入門惊搏,下次再學(xué)習(xí)更深入的應(yīng)用贮乳。