express与koa的使用对比(详细教程)
很多人都在问到底该用Koa还是express,所以下面这篇文章就来给大家再次的对比了关于express与koa的相关资料,通过对比大家可以更好的进行选择,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着我来一起学习学习吧。
前言
提到Node.js开发,不得不提目前炙手可热的2大框架express和koa。Express诞生已有时日,是一个简洁而灵活的web开发框架,使用简单而功能强大。Koa相对更为年轻,是Express框架原班人马基于ES6新特性重新开发的敏捷开发框架,现在可谓风头正劲,大有赶超Express之势。
Express和koa都是服务端的开发框架,服务端开发的重点是对HTTP Request和HTTP Response两个对象的封装和处理,应用的生命周期维护以及视图的处理等。
Express主要基于Connect中间件框架,功能丰富,随取随用,并且框架自身封装了大量便利的功能,比如路由、视图处理等等。而koa主要基于co中间件框架,框架自身并没集成太多功能,大部分功能需要用户自行require中间件去解决,但是由于其基于ES6 generator特性的中间件机制,解决了长期诟病的“callback hell”和麻烦的错误处理的问题,大受开发者欢迎。
以前其实写过一篇express和koa的对比, 但是后来发现里面有不少谬误. 所以一直惦记着纠正一下之前的错误, 尤其关于中间件部分的对比.
这里的express就拿更加简单的connect代替
connect的执行流程
通常我们都说connect的中间件模型是线性的, 也就是一个一个往下执行的, 如下图:
这么说当然是没错的, 但是当我们执行下面代码的时候可能会有那么一点小小的困惑:
const connect = require('connect') const app = connect() app.use(function m1 (req, res, next) { console.log('m1') next() console.log('m1 end') }) app.use(function m2 (req, res, next) { console.log('m2') next() console.log('m2 end') }) app.use(function m3 (req, res, next) { console.log('m3') res.end('hello') }) app.listen(8080)
当我们访问http://127.0.0.1:8080的时候, 控制台会打印如下:
m1 m2 m3 m2 end m1 end
这么个结果跟我们上面的模型似乎有点出入, 不是说线性的吗, 为什么next后面的代码还会继续执行? 当然这个我们再之前已经有过结论了, 有兴趣的可以详细瞧瞧, 我们现在直接拿来结果, connect的中间件模型伪代码表示如下:
http.createServer(function (req, res) { m1 (req, res) { m2 (req, res) { m3 (req, res) {} } } })
可以看到就是一层一层嵌套的回调, 那么再把我们之前有点疑问的代码简化一下:
http.createServer(function (req, res) { console.log('m1') m1 (req, res) { console.log('m2') m2 (req, res) { m3 (req, res) { console.log('m3') res.end('hello') } } console.log('m2 end') } console.log('m1 end') })
千万别被上面的回调绕晕了, 就是很简单的回调函数, 一切都解释的通了: 即使res.end之后, 我们的代码还是要继续往下走的, 可以这么说connect的中间件其实也是洋葱形的, 但是因为作为同步代码, 一般不回这么做罢了, 那么上面我们可以重现描述一下connect的中间件模型了:
Koa的执行流程
同样我们再Koa源码分析, 也是说过Koa的中间件模型: 洋葱形
以下面代码为例:
const Koa = require('koa') const app = new Koa() app.use(async function m1 (ctx, next) { console.log('m1') await next() console.log('m1 end') }) app.use(async function m2 (ctx, next) { console.log('m2') await next() console.log('m2 end') }) app.use(async function m3 (ctx) { console.log('m3') ctx.body = 'hello' }) app.listen(8080)
访问服务, 输出:
m1 m2 m3 m2 end m1 end
emm 貌似跟connect没差别, 之前看过一篇文章, 实验到这里得到了一个koa和express的中间件模型没差别的结论, 包括我也是很迷惑, 当然是有差别的, 结论后面讲. 同样这里直接拿出koa中间件的简化模型:
Promise.resolve(async m1 () { console.log(m1) await Promise.resolve(async m2 () { console.log(m2) await Promise.resolve(async m3 () { console.log(m3) ctx.body = 'xxx' }) console.log(m2 end) }) console.log(m1 end) })
我们知道async/await的作用是'同步化'异步操作(看上去如此, 其实不是, 但是我们不需要去管), 那这里的Promise理所当然的被'同步'了, 也就是说console.log(m3 end)
的一切异步操作都可以'同步化'.
结论
说出结论之前我们其实可以想一下, 既然connect的中间件也是洋葱形的, 那么跟koa一样的用法似乎也没啥毛病, 那么我来设想一下, 我们的服务需要取数据库里的的一个用户假设是getUser吧, getUser当然是异步的. 分别来看看connect和koa的做法吧:
// connect app.use(function (req, res) { getUser(user => res.end(user)) }) // Koa app.use(async (ctx) => { const user = await getUser() ctx.body = user })
当然这么看似乎没啥差别. 那直接给出结论吧(憋): connect的中间件是同步, 不会'等'其他异步操作, koa则可以'等'异步操作. 当然你不等也没啥问题.
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
Atas ialah kandungan terperinci express与koa的使用对比(详细教程). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Dalam pasaran telefon pintar hari ini, pengguna berhadapan dengan lebih banyak pilihan. Dengan perkembangan teknologi yang berterusan, pengeluar telefon mudah alih telah melancarkan lebih banyak model dan gaya, antaranya Vivox100 dan Vivox100Pro sudah pasti dua produk yang telah menarik perhatian ramai. Kedua-dua telefon bimbit ini datang daripada jenama terkenal Vivox, tetapi ia mempunyai perbezaan tertentu dalam fungsi, prestasi dan harga Jadi apabila berdepan dengan dua telefon bimbit ini, yang mana satu lebih berbaloi untuk dibeli? Terdapat perbezaan yang jelas dalam reka bentuk penampilan antara Vivox100 dan Vivox100Pro

Pada masa ini, syiling berpotensi yang digemari oleh bulatan mata wang termasuk syiling SOL dan syiling BCH adalah token asli platform blok Solana BCH ialah token projek BitcoinCash, yang merupakan mata wang fork Bitcoin. Oleh kerana mereka mempunyai ciri teknikal, senario aplikasi dan hala tuju pembangunan yang berbeza, adalah sukar bagi pelabur untuk membuat pilihan antara kedua-duanya. Saya ingin menganalisis yang mana satu lebih berpotensi, mata wang SOL atau BCH? Melabur lagi. Walau bagaimanapun, perbandingan mata wang memerlukan analisis komprehensif berdasarkan pasaran, prospek pembangunan, kekuatan projek, dll. Seterusnya, editor akan memberitahu anda secara terperinci. Mana satu lebih berpotensi, syiling SOL atau BCH? Sebagai perbandingan, syiling SOL mempunyai lebih banyak potensi Menentukan yang mana satu lebih berpotensi, syiling SOL atau BCH, adalah isu yang rumit kerana ia bergantung kepada banyak faktor.

Perbandingan prestasi Windows 10 vs. Windows 11: Mana satu yang lebih baik? Dengan pembangunan dan kemajuan teknologi yang berterusan, sistem pengendalian sentiasa dikemas kini dan dinaik taraf. Sebagai salah satu pembangun sistem pengendalian terbesar di dunia, siri sistem pengendalian Microsoft Windows sentiasa menarik perhatian ramai pengguna. Pada tahun 2021, Microsoft mengeluarkan sistem pengendalian Windows 11, yang mencetuskan perbincangan dan perhatian yang meluas. Jadi, apakah perbezaan prestasi antara Windows 10 dan Windows 11?

Kotak TV, sebagai peranti penting yang menghubungkan Internet dan TV, telah menjadi semakin popular sejak beberapa tahun kebelakangan ini. Dengan populariti TV pintar, pengguna semakin menggemari jenama kotak TV seperti Tmall, Xiaomi, ZTE dan Huawei. Untuk membantu pembaca memilih kotak TV yang paling sesuai untuk mereka, artikel ini akan memberikan perbandingan yang mendalam tentang ciri dan kelebihan empat kotak TV ini. 1. Huawei TV Box: Pengalaman audio-visual pintar adalah sangat baik dan boleh memberikan pengalaman tontonan yang lancar Huawei TV Box mempunyai pemproses yang berkuasa dan kualiti gambar definisi tinggi. Seperti video dalam talian, dan aplikasi kaya terbina dalam, muzik dan permainan, dsb., ia menyokong pelbagai format audio dan video. Kotak TV Huawei juga mempunyai fungsi kawalan suara, yang menjadikan operasi lebih mudah. Anda boleh menghantar kandungan pada telefon mudah alih anda ke skrin TV dengan mudah

Bagaimana untuk mengendalikan muat naik fail? Artikel berikut akan memperkenalkan kepada anda cara menggunakan ekspres untuk mengendalikan muat naik fail dalam projek nod saya harap ia akan membantu anda!

Penilaian perbandingan Vivox100 dan Vivox100Pro: Mana satu yang anda lebih suka? Memandangkan telefon pintar terus menjadi lebih popular dan lebih berkuasa, permintaan orang ramai terhadap aksesori telefon bimbit juga semakin meningkat. Sebagai bahagian penting dalam aksesori telefon mudah alih, fon kepala memainkan peranan penting dalam kehidupan dan pekerjaan harian orang ramai. Di antara banyak jenama fon kepala, Vivox100 dan Vivox100Pro adalah dua produk yang telah menarik perhatian ramai. Hari ini, kami akan menjalankan penilaian perbandingan terperinci kedua-dua fon kepala ini untuk melihat kelebihan dan kekurangannya

Tajuk: Perbandingan prestasi, kelebihan dan kekurangan bahasa Go dan bahasa pengaturcaraan lain Dengan perkembangan teknologi komputer yang berterusan, pilihan bahasa pengaturcaraan menjadi semakin kritikal, antaranya prestasi menjadi pertimbangan penting. Artikel ini akan mengambil bahasa Go sebagai contoh untuk membandingkan prestasinya dengan bahasa pengaturcaraan biasa yang lain dan menganalisis kelebihan dan kekurangan masing-masing. 1. Gambaran Keseluruhan Bahasa Go Bahasa Go ialah bahasa pengaturcaraan sumber terbuka yang dibangunkan oleh Google Ia mempunyai ciri-ciri penyusunan pantas, keselarasan yang cekap, ringkas dan mudah dibaca Ia sesuai untuk pembangunan perkhidmatan rangkaian, sistem pengedaran, pengkomputeran awan dan bidang lain. Pergi

Tahap apakah yang setara dengan kad grafik 4060 Dengan kemajuan teknologi yang berterusan dan pengemaskinian pesat peralatan elektronik, teknologi kad grafik juga sentiasa berkembang dan berkembang. Dalam bidang komputer, kad grafik bukan sahaja merupakan bahagian penting dalam permainan dan fail multimedia, tetapi juga memainkan peranan penting dalam pemprosesan grafik, penyuntingan video dan reka bentuk profesional. Oleh itu, adalah penting untuk memilih kad grafik yang sesuai dengan keperluan dan prestasi anda. Dalam beberapa tahun kebelakangan ini, NVIDIA telah menjadi salah satu jenama kad grafik yang paling popular di pasaran, dengan rangkaian produk yang komprehensif meliputi banyak tahap prestasi yang berbeza. Dan 4060
