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

為何從eggjs升級(jí)到midwayjs的原因詳解

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

引言

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

最近筆者在維護(hù)一個(gè)舊的node項(xiàng)目,項(xiàng)目基于eggjs開發(fā)的,數(shù)據(jù)庫(kù)是mysql,緩存redis,消息中間件用的是rocketMQ。項(xiàng)目早期用的是js,在改造typescript的過(guò)程中,越來(lái)越感覺(jué)到eggjs對(duì)typescript兼容性不好,加上midwayjs的Ioc機(jī)制是開發(fā)中的一個(gè)爽點(diǎn),還是決定暢通不如短痛,升級(jí)midwayjs

midwayjs簡(jiǎn)介

先放官方文檔傳送門

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

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

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

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

通過(guò)這兩個(gè)裝飾器的搭配,我們可以方便的在任意類中拿到實(shí)例對(duì)象,就像上面的 this.userService。

為什么不是nestjs

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

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

接下來(lái)先看看IoC機(jī)制,以及Typescript裝飾器是什么

IoC機(jī)制與裝飾器

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

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

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

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

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

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

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

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

總結(jié)

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

參考資料

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

Decorate your code with TypeScript decorators

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

相關(guān)文章

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

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

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

    Node.js 使用AngularJS的方法示例

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

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

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

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

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

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

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

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

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

    koa大型web項(xiàng)目中使用路由裝飾器的方法示例

    這篇文章主要介紹了koa大型web項(xiàng)目中使用路由裝飾器的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • node.js解決全局安裝pnpm后無(wú)法使用的問(wèn)題

    node.js解決全局安裝pnpm后無(wú)法使用的問(wèn)題

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

    NPM 安裝cordova時(shí)警告:npm WARN deprecated minimatch@2.0.10: Pleas

    這篇文章主要介紹了NPM 安裝cordova時(shí)警告: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的運(yùn)行時(shí)(運(yùn)行環(huán)境-宿主環(huán)境),下面這篇文章主要給大家介紹了關(guān)于node.js中fs\path\http模塊的使用方法,需要的朋友可以參考下
    2023-01-01

最新評(píng)論

资源县| 车致| 武乡县| 西峡县| 镇沅| 丹东市| 类乌齐县| 马关县| 京山县| 海宁市| 黑河市| 双流县| 安阳县| 易门县| 营口市| 枝江市| 营口市| 色达县| 辽宁省| 自贡市| 铁岭市| 盐源县| 涞源县| 永福县| 衡东县| 乃东县| 三台县| 利川市| 神池县| 绥中县| 瑞昌市| 美姑县| 射洪县| 临猗县| 延庆县| 苏州市| 永和县| 安福县| 乐安县| 安塞县| 收藏|