Koa 与 Express 的比较:多数场景下选择 Express 就对了
原文地址:Koa vs Express,2020.12.10, from stackchief.com
Koa 是 Express 的轻量级版本。它是一个中间件框架,没有像 Express 那样的额外模块(比如,没有内置路由和模板引擎)。
Koa 由与 Express 相同的团队开发。事实上,许多人认为 Koa 是“Express 5.0”,因为它的开发很大程度上是最初 Express 的所有权问题导致(请参见 Reddit)。
Koa 利用 async
/await
编写更清晰的代码。虽然最初 Koa 有助于避免“回调地狱”,但自 Node 7 发布以来,Koa 和 Express 语法之间的差异更小了...
使用 Express 进行基本路由
const express = require('express')
const app = express()
const asyncActivity = async () => {
return { success: true }
}
const asyncWrapper = fn => (...args) => fn(...args).catch(args[2])
app.get('/', asyncWrapper(async (req, res, next) => {
const result = await asyncActivity()
res.json(result)
}))
app.use(function errorMiddleware(error, req, res, next) {
res.status(500)
res.send(error)
})
使用 Koa 进行基本路由
const Koa = require('koa')
const Router = require('koa-router')
const app = new Koa()
const router = new Router()
const asyncActivity = async () => {
return { success: true }
}
app.use(async function handleError(context, next) {
// 调用下一个中间件
try {
await next()
} catch (error) {
// 捕捉可能发生的任何错误
context.status = 500
context.body = error
}
})
app.use(router.routes())
app.use(router.allowedMethods())
router
.get('/', async (context, next) => {
const result = await asyncActivity()
context.body = result
})
app.listen(3000)
从这些例子中,您会注意到使用 Koa 可以节省一些样板代码。具体来说,你不用编写一个 asyncWrapper()
函数。
与 Express 不同,Koa 默认情况下不包括路由模块,你需要单独引入 koa-router
包用来定义路由。
Koa 与 Express:主要区别
中间件链接方式
Express 中间件链是基于回调的,而 Koa 的则是基于 Promise 的。这就是为什么我们在 Express 中最后定义 errorMiddleware
,在 Koa 中首先定义 handleError。
增强 Node vs 替换 Node
Express 是 NodeJS 的一个 Web 框架。它通过为 Node 的 req 和 res 对象添加有用的方法和属性来增强其功能。
例如,Express 会向 http req
对象添加像 req.method
和 req.headers()
这样的内容,并向 http res
对象添加 res.sendFile()
。
Koa 是 NodeJS 的一个中间件框架。Koa 使用自己的上下文(ctx
)替换或提取 Node 的 req
和 res
对象属性。
例如,context.body = result
可以为请求设置响应体。
更加轻量
Koa 比 Express 更轻量级。Koa 不像 Express 那样包含路由器或视图引擎模块。这些模块是单独存在的,可以很容易地被包含进来。在我们的示例中,你会注意到我们必须为 Koa 实例单独包含 koa-router
,而Express 中已经内置这个功能。
与 Express 不同的是,Koa 默认情况下不支持路由、模板引擎、发送文件、JSONP 等功能。
没那么流行(正在增长)
Express 比 Koa 受欢迎多了。虽然 Koa 的流行度在增长,但是 Express 仍然是事实上的 Web 应用程序框架,每周下载量超过 1100 万次。
这意味着你会在 Express 上找到比 Koa 更多的文档。NodeJS 开发人员更有可能在项目中使用经验丰富的Express 而不是 Koa。
更简洁的语法
Koa 利用生成器函数和 async
/await
实现更清晰的代码。虽然这有助于避免在 Express 中常见的“回调地狱”问题,但在 Node v7+ 中 async/await 与 Express 一起配合使用时,问题并没那么明显。
什么时候用 Express
什么时候用 Koa
- 当你的应用程序不是基于浏览器且不需要路由和模板支持时,请使用 Koa。
- 如果你强调性能(更轻量级),请使用 Koa。虽然性能提升可能微不足道,但在某些测试条件下,Koa已被证明比 Express 略快。
总结
请记住,开发 Express 和 Koa 的是同一拨开发人员。Koa 只是 Express 的一个更轻量级的版本,没有内置提供路由和模板引擎等功能。
相比于 Koa,Express 更加成熟。它的社区更为稳定,并且你可以在 Express 上找到比 Koa 更多的文档和示例。
虽然使用 Koa 可以使编写中间件更加简洁,但是使用 Express 结合 async
/await
也可以避免“回调地狱”并实现类似的语法。
总之,就是 Express 和 Koa 能够实现完全一样的功能。
转载自:https://juejin.cn/post/7234057613776076857