基礎-1

  1. Nest是一個漸進式的Node框架,可以在TypeScriptJavaScript(ES6例书、ES7昧捷、ES8)之上構建高效、可伸縮的企業(yè)級服務端應用程序堤框;
  2. Nest基于TypeScritp編寫域滥、并結合使用OOP(面向對象編程)FP(函數式編程)ERP(函數式響應編程)的相關理念蜈抓;
  3. Nest的設計靈感很多來自于Angular启绰,而Angular的很多模式又來自于JavaSpring框架,諸如AOP(面向切片編程)沟使、依賴注入委可、控制反轉等等,所以NestNode版的Spring框架格带!
  4. Nest底層HTTP平臺默認基于Express實現(xiàn)的撤缴,所以無需擔心第三方庫的缺失刹枉;技術上講,Nest可以在創(chuàng)建適配器后使用任何Node Http框架屈呕,但它提供了兩個開箱即用的HTTP平臺:Express微宝、Fastify
  5. Nest的核心思想:提供一個層與層之間的耦合度極小虎眨、抽象化極高的架構體系蟋软。

環(huán)境搭建

  1. 腳手架:npm i -g @nestjs/cli yarn global add @nestjs/di
  2. 創(chuàng)建項目:nest new project-name
  3. 運行項目:npm run start
  4. 熱重載運行:npm run start:dev
nest結構.png

控制器

  1. 控制器層負責處理用戶的請求,并做出響應嗽桩;
    Client ---> Controller-1岳守、Controller-2、Controller-3
  1. 創(chuàng)建控制器:nest g controller xxx
    1. src目錄中生成xxx目錄碌冶,其中包含xxx.controller.ts
    2. 控制器是一個裝飾了Controller的類湿痢,xxx生成對應的@Controller('xxx')
    3. 同時在根模塊app.module.ts中,引入了此控制器:controllers:[AppController, XxxController]
  2. @Get裝飾器處理Get請求
    @Controller('xxx')
    export class XxxController {
        @Get()   // http://localhost:3000/xxx
        index() {
            return 'hello xxx'
        }
        @Get('add')   // http://localhost:3000/xxx/add
        add() {
            return 'hello xxx add'
        }
    }
    
    1. 處理Get傳參:@Query
        @Get('add')   // http://localhost:3000/xxx/add?id=123&name=Jack
        add(@Query() query) {    // { id: 123, name: Jack }
            return 'hello xxx add'
        }
        
        @Get('add')
        add(@Query('id') id) {    // 指定只獲取某一個參數
            return id   // 123
        }
    
    1. @Request也可以處理Get參數扑庞,類似于Express平臺的Request譬重,包含有請求的完整信息。
        @Get('add')   // http://localhost:3000/xxx/add?id=123&name=Jack
        add(@Request() req) {
            return req.query   // { id: 123, name: Jack }
        }
    
  3. @Post裝飾器處理Post請求
        @Post('create')
        create() {
            return 'hello xxx create'
        }
    
    1. @Body處理Post參數
        @Post('create')
        create(@Body() body) {
            return 'hello xxx create'
        }
    
    1. @Body也可以指定只獲取某一個參數:@Body('key')
  4. @Param處理動態(tài)路由的參數
        @Get(':id')   // http://localhost:3000/xxx/111
        show(@Param() param) {
            console.log(param)    // { id: 111 }
            return 'hello xxx'
        }
    
        @Get(':id')
        show(@Param('id') id) {   // 指定只獲取 id
            return id  // 111
        }
    
  5. 模糊匹配罐氨,如 * 表示匹配 n(n>=0) 個字符
        @Get('a*a')   // http://localhost:3000/xxx/adda
        add() {
            return 'hello xxx add'
        }
    
  6. @Headers(name?: string):獲取請求頭臀规;@Redirect:重定向;
  7. @Response():響應對象的裝飾器栅隐∷遥控制器方法不能再通過 return 響應數據,而是使用 Response 對象自身的方法租悄。
    @Get()
    admin(@Response() res) {
        res.redirect('/user');  //重定向
    }
    
    @Get('add')
    add(@Response() res) {
        res.send({ msg: 'success' });  //響應數據
    }
    

配置靜態(tài)資源

  1. 靜態(tài)資源配置依賴所使用的平臺谨究,以Express平臺為例
  2. main.ts
        import { NestExpressApplication } from '@nestjs/platform-express';
        async function bootstrap() {
            // 通過泛型指定使用的平臺Express
            const app = await NestFactory.create<NestExpressApplication>(AppModule);
            //配置靜態(tài)資源的目錄:根目錄/public
            app.useStaticAssets('public');
            await app.listen(3000);
        }
    
  3. public目錄中的靜態(tài)資源可以直接訪問:http://localhost:3000/logo.png
  4. 還可以配置虛擬目錄
        app.useStaticAssets('public', { prefix: '/static/' });
        //訪問:http://localhost:3000/static/logo.png
    

配置模板引擎

  1. ejs 為例:npm i ejs --save
  2. main.ts:配置視圖文件的目錄,指定使用的模板引擎恰矩;
        app.setBaseViewsDir('views');  // 根目錄/views
        app.setViewEngine('ejs');
    
  3. 創(chuàng)建視圖 views/admin/index.ejs
        <h2>姓名:<%= name%></h2>
        <h2>年齡:<%= age%></h2>
    
  4. 在控制器中渲染并響應視圖
        @Get()
        @Render('admin/index')
        admin() {
            return { name: 'Mack', age: 20 }  //向模板中傳遞數據
        }
    

服務

  1. Nestjs中的服務可以是service记盒,也可以是provider,可以通過constructor注入依賴關系外傅;
  2. 服務本質上就是通過 @Injectable() 裝飾的類纪吮,在Nestjs中,服務相當于MVC的Model萎胰;
  3. 創(chuàng)建服務
    nest g service xxx
    
    1. 生成xxx/xxx.service.ts
        import {Injectable} from '@nestjs/common'
        @Injectable()
        export class XxxService {
            find() {
                return {name: 'Jack', age: 20};
            }
        }
    
    1. 根模塊app.module.ts中碾盟,自動引入服務
        providers: [AppService, XxxService]
    
    1. 在需要使用的地方注入服務對象
        nest g controller xxx   //創(chuàng)建控制器
    
        @Controller('xxx')
        export class XxxController {
            //依賴注入
            constructor(private service: XxxService) { }
            @Get()
            index() {
                return this.service.find();
            }
        }
    
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市技竟,隨后出現(xiàn)的幾起案子冰肴,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熙尉,死亡現(xiàn)場離奇詭異联逻,居然都是意外死亡,警方通過查閱死者的電腦和手機检痰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門包归,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人铅歼,你說我怎么就攤上這事公壤。” “怎么了椎椰?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵厦幅,是天一觀的道長。 經常有香客問我慨飘,道長确憨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任套媚,我火速辦了婚禮缚态,結果婚禮上磁椒,老公的妹妹穿的比我還像新娘堤瘤。我一直安慰自己,他們只是感情好浆熔,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布本辐。 她就那樣靜靜地躺著,像睡著了一般医增。 火紅的嫁衣襯著肌膚如雪慎皱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天叶骨,我揣著相機與錄音茫多,去河邊找鬼。 笑死忽刽,一個胖子當著我的面吹牛天揖,可吹牛的內容都是我干的。 我是一名探鬼主播跪帝,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼今膊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伞剑?” 一聲冷哼從身側響起斑唬,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后恕刘,有當地人在樹林里發(fā)現(xiàn)了一具尸體缤谎,經...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年褐着,在試婚紗的時候發(fā)現(xiàn)自己被綠了弓千。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡献起,死狀恐怖洋访,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情谴餐,我是刑警寧澤姻政,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站岂嗓,受9級特大地震影響汁展,放射性物質發(fā)生泄漏。R本人自食惡果不足惜厌殉,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一食绿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧公罕,春花似錦器紧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至罐柳,卻和暖如春掌腰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背张吉。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工齿梁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肮蛹。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓勺择,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蔗崎。 傳聞我的和親對象是個殘疾皇子酵幕,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內容