最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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,當然midwayjs支持切換依賴的web框架),提供一些開發(fā)中過于模版化的能力,簡化日常開發(fā)中的配置復雜度,讓你更能專注于業(yè)務,兩者并沒有什么本質(zhì)上的區(qū)別。midwayjs是阿里的團隊開源的,nestjs是國外Trilon團隊的,性能上沒有做對比,應該也不會有太大的差異,沒必要太糾結(jié)具體去用哪個框架

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

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

IoC機制與裝飾器

IoC(Inversion of Control)即是“控制反轉(zhuǎn)”,這并非是一種技術(shù),是面向?qū)ο缶幊痰囊环N設計思想。在Java中,IoC意味著你將設計好的對象交給容器控制,而不是在對象內(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,然后不得不提的就是裝飾器,當前裝飾器提案已經(jīng)進入到了Stage 3階段,在標準化上也算有些進展

裝飾器是一種特殊的聲明,可附加在類、方法、訪問器、屬性、參數(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)擁有了除了作為后端應用之外的能力了。后續(xù)隨著項目的升級,筆者還會繼續(xù)去分享midwayjs背后一些深入的技術(shù)點,以及踩過的坑

參考資料

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

Decorate your code with TypeScript decorators

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

相關(guān)文章

  • nodejs中實現(xiàn)路由功能

    nodejs中實現(xiàn)路由功能

    這篇文章主要介紹了nodejs中實現(xiàn)路由功能,顧名思義,路由指的就是我們要針對不同的URL有不同的處理方式,本文將教你在node.js中實現(xiàn)路由功能,需要的朋友可以參考下
    2014-12-12
  • Node.js 使用AngularJS的方法示例

    Node.js 使用AngularJS的方法示例

    這篇文章主要介紹了Node.js 使用AngularJS的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • 利用NPM淘寶的node.js鏡像加速nvm

    利用NPM淘寶的node.js鏡像加速nvm

    這篇文章主要介紹了利用NPM淘寶的node.js鏡像加速nvm的相關(guān)資料,文中介紹的非常詳細,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • node.js支持多用戶web終端實現(xiàn)及安全方案

    node.js支持多用戶web終端實現(xiàn)及安全方案

    這篇文章主要介紹了node.js支持多用戶web終端實現(xiàn)方案以及web終端安全性保證的解決方法,一起學習參考下。
    2017-11-11
  • Node+Express+MongoDB實現(xiàn)登錄注冊功能實例

    Node+Express+MongoDB實現(xiàn)登錄注冊功能實例

    這篇文章主要介紹了Node+Express+MongoDB實現(xiàn)登錄注冊功能,需要的朋友可以參考下
    2017-04-04
  • Node.js中module.exports?和exports使用誤區(qū)

    Node.js中module.exports?和exports使用誤區(qū)

    本文主要介紹了Node.js中module.exports?和exports使用誤區(qū),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • koa大型web項目中使用路由裝飾器的方法示例

    koa大型web項目中使用路由裝飾器的方法示例

    這篇文章主要介紹了koa大型web項目中使用路由裝飾器的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • node.js解決全局安裝pnpm后無法使用的問題

    node.js解決全局安裝pnpm后無法使用的問題

    在全局安裝pnpm后,如果出現(xiàn)無法使用的問題,一般是由于沒有添加系統(tǒng)變量導致的,本文就來介紹一下node.js解決全局安裝pnpm后無法使用的問題,感興趣的可以了解一下
    2024-10-10
  • NPM 安裝cordova時警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to

    NPM 安裝cordova時警告:npm WARN deprecated minimatch@2.0.10: Pleas

    這篇文章主要介紹了NPM 安裝cordova時警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • node.js中fs\path\http模塊的使用方法詳解

    node.js中fs\path\http模塊的使用方法詳解

    Node.js是基于Chrome V8引擎的JavaScript的運行時(運行環(huán)境-宿主環(huán)境),下面這篇文章主要給大家介紹了關(guān)于node.js中fs\path\http模塊的使用方法,需要的朋友可以參考下
    2023-01-01

最新評論

廉江市| 滦南县| 娱乐| 嘉义市| 遂溪县| 梧州市| 黎城县| 公安县| 香港 | 中宁县| 河源市| 贡嘎县| 静乐县| 长兴县| 漳浦县| 阜阳市| 江陵县| 涡阳县| 慈溪市| 辽阳县| 兴安盟| 博野县| 互助| 莫力| 平凉市| 云龙县| 陆丰市| 麻阳| 海阳市| 克山县| 太原市| 温泉县| 万山特区| 海丰县| 威宁| 林周县| 自治县| 新化县| 库伦旗| 正定县| 惠东县|