欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

為何從eggjs升級到midwayjs的原因詳解

 更新時間:2022年11月27日 08:35:17   作者:秋染蒹葭  
這篇文章主要為大家介紹了為何從eggjs升級到midwayjs的原因詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

今天突然發(fā)現(xiàn)園區(qū)的銀杏葉突然全黃了,想起來兩周前到臨安去玩的時候還是青黃交加的一片呢。雖然最近溫度似乎也沒怎么降,但從最近路邊的落葉上看,真的是深秋了,可能就再需要一場秋雨,杭州就要開始入冬了吧

最近筆者在維護一個舊的node項目,項目基于eggjs開發(fā)的,數(shù)據(jù)庫是mysql,緩存redis,消息中間件用的是rocketMQ。項目早期用的是js,在改造typescript的過程中,越來越感覺到eggjs對typescript兼容性不好,加上midwayjs的Ioc機制是開發(fā)中的一個爽點,還是決定暢通不如短痛,升級midwayjs

midwayjs簡介

先放官方文檔傳送門

Midway 是阿里巴巴 - 淘寶前端架構(gòu)團隊,基于漸進式理念研發(fā)的 Node.js 框架,通過自研的依賴注入容器,搭配各種上層模塊,組合出適用于不同場景的解決方案

先看看關(guān)鍵字,依賴注入,對于前端同學(xué)來說,這是個相對陌生的點。也難怪,日常開發(fā)中這些使用的確實不多,java同學(xué)會了解的相對多一點,畢竟IoC能力是Java Spring 體系中非常重要的核心,而這也是MidWay的核心競爭力了。另外Midway全量使用TypeScript,結(jié)合TS裝飾器,讓開發(fā)體驗有質(zhì)的提升。項目使用中類型推導(dǎo)很好用,這對日常維護能起到非常正面的作用??梢韵瓤匆粋€官方的簡單??

import { Provide, Inject, Get } from '@midwayjs/decorator';
// user.controller.ts
@Provide()  // 實際可省略
@Controller()
export class UserController {
  @Inject()
  userService: UserService;
  @Get('/')
  async get() {
    const user = await this.userService.getUser();
    console.log(user);      // world
  }
}

@Provide 的作用是告訴依賴注入容器,我需要被容器所加載。 @Inject 裝飾器告訴容器,我需要將某個實例注入到屬性上。

通過這兩個裝飾器的搭配,我們可以方便的在任意類中拿到實例對象,就像上面的 this.userService。

為什么不是nestjs

社區(qū)內(nèi)還有類似的nestjs框架,兩者都是走的IoC方式,兩者都是框架的封裝(midwayjs-->eggjs-->koajs,nestjs-->express.js,當(dāng)然midwayjs支持切換依賴的web框架),提供一些開發(fā)中過于模版化的能力,簡化日常開發(fā)中的配置復(fù)雜度,讓你更能專注于業(yè)務(wù),兩者并沒有什么本質(zhì)上的區(qū)別。midwayjs是阿里的團隊開源的,nestjs是國外Trilon團隊的,性能上沒有做對比,應(yīng)該也不會有太大的差異,沒必要太糾結(jié)具體去用哪個框架

所以筆者并不太在意到底用什么框架,但是團隊內(nèi)的同學(xué)更熟悉eggjs,eggjs到midwayjs的學(xué)習(xí)曲線相對平滑,而且midway的文檔更友好一些,基于后續(xù)維護成本的考慮,在體驗并沒有打折的情況下,就選定了midwayjs了

接下來先看看IoC機制,以及Typescript裝飾器是什么

IoC機制與裝飾器

IoC(Inversion of Control)即是“控制反轉(zhuǎn)”,這并非是一種技術(shù),是面向?qū)ο缶幊痰囊环N設(shè)計思想。在Java中,IoC意味著你將設(shè)計好的對象交給容器控制,而不是在對象內(nèi)直接控制,理論很抽象,看一下偽代碼

/***** 下面為 Midway 內(nèi)部代碼 *****/
const container = new MidwayContainer();
container.bind(UserController);
container.bind(UserService);

在請求時,會動態(tài)實例化這些 Class,MidwayContainer就是依賴注入容器,midwayjs的依賴注入的實現(xiàn)是injection,社區(qū)還有一些其他的實現(xiàn)這里就不再贅述了

說到了IoC,然后不得不提的就是裝飾器,當(dāng)前裝飾器提案已經(jīng)進入到了Stage 3階段,在標(biāo)準(zhǔn)化上也算有些進展

裝飾器是一種特殊的聲明,可附加在類、方法、訪問器、屬性、參數(shù)聲明上。

裝飾器使用 @expression 的形式,其中 expression 必須能夠演算為在運行時調(diào)用的函數(shù),其中包括裝飾聲明信息。其本質(zhì)就是一個函數(shù),它能夠動態(tài)地修改被裝飾的類或類成員,在這些部分的值未定義時進行初始化,或在這里已有值時,在值實例化后執(zhí)行一些額外的代碼。比如:

// @Controller 裝飾器告訴框架,這是一個 Web 控制器類型的類,而 @Get 裝飾器告訴框架,被修飾的 home 方法,將被暴露為 / 這個路由,可以由 GET 請求來訪問。
import { Controller, Get } from '@midwayjs/decorator';
@Controller('/')
export class HomeController {
  @Get('/')
  async home() {
    return "Hello Midwayjs!";
  }
}

本文是深入midwayjs的第一篇,簡單介紹一下IoC和裝飾器相關(guān)的知識,先挖個坑,后續(xù)做一些更深入的分享

總結(jié)

midwayjs對于typescript強支持,讓項目的可維護性提高了一個檔次,而且midwayjs在20年的時候就已經(jīng)升級了midway-serverless體系,其實已經(jīng)擁有了除了作為后端應(yīng)用之外的能力了。后續(xù)隨著項目的升級,筆者還會繼續(xù)去分享midwayjs背后一些深入的技術(shù)點,以及踩過的坑

參考資料

控制反轉(zhuǎn)(IOC)和依賴注入(DI)的關(guān)系

Decorate your code with TypeScript decorators

以上就是為何從eggjs升級到midwayjs的原因詳解的詳細(xì)內(nèi)容,更多關(guān)于eggjs升級midwayjs的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • PHPStorm中如何對nodejs項目進行單元測試詳解

    PHPStorm中如何對nodejs項目進行單元測試詳解

    這篇文章主要給大家介紹了關(guān)于PHPStorm中如何對nodejs項目進行單元測試的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • koa源碼中promise的解讀

    koa源碼中promise的解讀

    這篇文章主要介紹了koa源碼中promise的解讀,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Express使用multer實現(xiàn)文件上傳的示例代碼

    Express使用multer實現(xiàn)文件上傳的示例代碼

    這篇文章主要介紹了Express 使用 multer 實現(xiàn)文件上傳的操作步驟,文中通過代碼示例和圖文結(jié)合的方式講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • nodejs簡單讀寫excel內(nèi)容的方法示例

    nodejs簡單讀寫excel內(nèi)容的方法示例

    這篇文章主要介紹了nodejs簡單讀寫excel內(nèi)容的方法,簡單分析了nodejs常見的讀寫Excel模塊,并結(jié)合實例形式分析了nodejs讀寫Excel具體操作技巧,需要的朋友可以參考下
    2018-03-03
  • Nodejs-cluster模塊知識點總結(jié)及實例用法

    Nodejs-cluster模塊知識點總結(jié)及實例用法

    在本篇文章里小編給大家整理的是一篇關(guān)于Nodejs-cluster模塊知識點總結(jié)及實例用法,有興趣的朋友們可以跟著學(xué)習(xí)下。
    2021-12-12
  • 詳解npm 配置項registry修改為淘寶鏡像

    詳解npm 配置項registry修改為淘寶鏡像

    這篇文章主要介紹了詳解npm 配置項registry修改為淘寶鏡像,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • NodeJS服務(wù)器實現(xiàn)gzip壓縮的示例代碼

    NodeJS服務(wù)器實現(xiàn)gzip壓縮的示例代碼

    這篇文章主要介紹了NodeJS服務(wù)器實現(xiàn)gzip壓縮的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • Node.js插件的正確編寫方式

    Node.js插件的正確編寫方式

    正如Node.js在官方說明文檔中所言,插件是以動態(tài)方式進行鏈接的共享式對象,能夠?qū)avaScript代碼與C/C++庫接駁起來。這意味著我們可以引用任何來自C/C++庫中的內(nèi)容,并通過創(chuàng)建插件的方式將其納入到Node.js當(dāng)中。
    2014-08-08
  • 修改node.js默認(rèn)的npm安裝目錄實例

    修改node.js默認(rèn)的npm安裝目錄實例

    今天小編就為大家分享一篇修改node.js默認(rèn)的npm安裝目錄實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Node.js中使用計時器定時執(zhí)行函數(shù)詳解

    Node.js中使用計時器定時執(zhí)行函數(shù)詳解

    這篇文章主要介紹了Node.js中使用計時器定時執(zhí)行函數(shù)詳解,本文使用了Node.js中的setTimeout和setInterval函數(shù),需要的朋友可以參考下
    2014-08-08

最新評論