日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Koa 还是 Express

發(fā)布時(shí)間:2023/12/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Koa 还是 Express 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??

先放一些別人寫的

  • http://yemista.com/koa-js-vs-express-js-which-one-better-for-node-js/
  • https://www.airpair.com/node.js/posts/nodejs-framework-comparison-express-koa-hapi
  • https://cnodejs.org/topic/540335d0cd66f2eb379b21d5

我也來(lái)湊個(gè)熱鬧

群里很多人在問(wèn)到底該用Koa還是express,本文會(huì)對(duì)比2個(gè)框架的各種細(xì)節(jié),并給出指導(dǎo)意見,希望能夠?yàn)榇蠹医饣蟆?/p>

  • http://koajs.com/
  • http://expressjs.com/

koa

koa 是由 Express 原班人馬打造的,致力于成為一個(gè)更小、更富有表現(xiàn)力、更健壯的 Web 框架。使用 koa 編寫 web 應(yīng)用,通過(guò)組合不同的 generator,可以免除重復(fù)繁瑣的回調(diào)函數(shù)嵌套,并極大地提升錯(cuò)誤處理的效率。koa 不在內(nèi)核方法中綁定任何中間件,它僅僅提供了一個(gè)輕量?jī)?yōu)雅的函數(shù)庫(kù),使得編寫 Web 應(yīng)用變得得心應(yīng)手。

版本要求

Koa 目前需要 >=0.11.x版本的 node 環(huán)境。并需要在執(zhí)行 node 的時(shí)候附帶 --harmony 來(lái)引入 generators 。

express無(wú)所謂,目前0.10+都o(jì)k,甚至更低版本

中間件變化

Koa 應(yīng)用是一個(gè)包含一系列中間件 generator 函數(shù)的對(duì)象。 這些中間件函數(shù)基于 request 請(qǐng)求以一個(gè)類似于棧的結(jié)構(gòu)組成并依次執(zhí)行。 Koa 類似于其他中間件系統(tǒng)(比如 Ruby’s Rack 、Connect 等), 然而 Koa 的核心設(shè)計(jì)思路是為中間件層提供高級(jí)語(yǔ)法糖封裝,以增強(qiáng)其互用性和健壯性,并使得編寫中間件變得相當(dāng)有趣。

Koa 包含了像 content-negotiation(內(nèi)容協(xié)商)、cache freshness(緩存刷新)、proxy support(代理支持)和 redirection(重定向)等常用任務(wù)方法。 與提供龐大的函數(shù)支持不同,Koa只包含很小的一部分,因?yàn)镵oa并不綁定任何中間件。

和 express 基于的中間件Connect,差別并不大,思想都是一樣的,它里面說(shuō)的

增強(qiáng)其互用性和健壯性

我還沒(méi)玩出太多感想,請(qǐng)大家指點(diǎn)

除了yield next;外,并無(wú)其他

yield要說(shuō)一下,必須在處理的中間件里才會(huì)回調(diào)

比如

var koa = require('koa'); var app = koa();//1 x-response-timeapp.use(function *(next){var start = new Date;yield next;var ms = new Date - start;this.set('X-Response-Time', ms + 'ms'); });//2 loggerapp.use(function *(next){var start = new Date;yield next;var ms = new Date - start;console.log('%s %s - %s', this.method, this.url, ms); });//3 responseapp.use(function *(){this.body = 'Hello World'; });app.listen(3000);

在程序啟動(dòng)的時(shí)候,1和2是沒(méi)有執(zhí)行的,只有當(dāng)執(zhí)行到任意請(qǐng)求,比如3的時(shí)候,它才會(huì)調(diào)用1和2

錯(cuò)誤處理

koa

app.on('error', function(err){log.error('server error', err); });

而在新版的express里

server.on('error', onError);/*** Event listener for HTTP server "error" event.*/function onError(error) {if (error.syscall !== 'listen') {throw error;}var bind = typeof port === 'string'? 'Pipe ' + port: 'Port ' + port;// handle specific listen errors with friendly messagesswitch (error.code) {case 'EACCES':console.error(bind + ' requires elevated privileges');process.exit(1);break;case 'EADDRINUSE':console.error(bind + ' is already in use');process.exit(1);break;default:throw error;} }

二者實(shí)際上沒(méi)有啥大差別

Koa Context

將 node 的 request 和 response 對(duì)象封裝在一個(gè)單獨(dú)的對(duì)象里面,其為編寫 web 應(yīng)用和 API 提供了很多有用的方法。

這些操作在 HTTP 服務(wù)器開發(fā)中經(jīng)常使用,因此其被添加在上下文這一層,而不是更高層框架中,因此將迫使中間件需要重新實(shí)現(xiàn)這些常用方法。

context 在每個(gè) request 請(qǐng)求中被創(chuàng)建,在中間件中作為接收器(receiver)來(lái)引用,或者通過(guò) this 標(biāo)識(shí)符來(lái)引用:

app.use(function *(){this; // is the Contextthis.request; // is a koa Requestthis.response; // is a koa Response });

比express里爽一些,express里中間件可變參數(shù)還是會(huì)比較惡心,而且性能也不好

對(duì)比一些api

  • req
  • res

基本上一模一樣

二者比較總結(jié)

https://github.com/koajs/koa/blob/master/docs/koa-vs-express.md

FeatureKoaExpressConnect
Middleware Kernel???
Routing???
Templating???
Sending Files???
JSONP???

Does Koa replace Express?

It’s more like Connect, but a lot of the Express goodies were moved to the middleware level in Koa to help form a stronger foundation. This makes middleware more enjoyable and less error-prone to write, for the entire stack, not just the end application code.

Typically many middleware would re-implement similar features, or even worse incorrectly implement them, when features like signed cookie secrets among others are typically application-specific, not middleware specific.

拿koa來(lái)比較express并不太合適,可以說(shuō)它是介于connect和express中間的框架

  • 與connect類似都是調(diào)用棧思想,但修改了中間件模式,使用generator
  • 把express里的一些好的東西加進(jìn)去,但剔除了路由,視圖渲染等特性

總結(jié)

koa是一個(gè)比express更精簡(jiǎn),使用node新特性的中間件框架,相比之前express就是一個(gè)龐大的框架

  • 如果你喜歡diy,很潮,可以考慮koa,它有足夠的擴(kuò)展和中間件,而且自己寫很簡(jiǎn)單
  • 如果你想簡(jiǎn)單點(diǎn),找一個(gè)框架啥都有,那么先express

koa是大勢(shì)所趨,我很想用,但我目前沒(méi)有選koa,我的考慮

  • node 0.11+我目前沒(méi)有搞定node-inspector,所以我啥時(shí)候搞定,啥時(shí)候遷移
  • 團(tuán)隊(duì)成本問(wèn)題,如果他們連express都不會(huì),上來(lái)就koa,學(xué)習(xí)曲線太陡,不合適
  • 目前基于express的快讀開發(fā)框架需要一段時(shí)間遷移到koa

和es6的考慮是一樣的,又愛又恨,先做技術(shù)儲(chǔ)備,只要時(shí)機(jī)ok,毫不猶豫的搞起。

目前express由strongloop負(fù)責(zé),它的下一步如何發(fā)展,還說(shuō)不好,比如5.0、6.0是否會(huì)用koa作為中間件也不好說(shuō)

koa代碼很少,可以很容易讀完

https://github.com/koajs/koa

另外值得提得一點(diǎn)是,核心開發(fā)者 @dead-horse 是阿里的員工,贊一下國(guó)內(nèi)的開源。

12月份我寫了一個(gè)koa-generator,可以讓很多習(xí)慣express的人遷移過(guò)來(lái),見文章https://cnodejs.org/topic/56650091e7cd33da066d6ee7

轉(zhuǎn)載于:https://my.oschina.net/dawd/blog/744332

總結(jié)

以上是生活随笔為你收集整理的Koa 还是 Express的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。