乐趣区

关于前端:都-2021-年了也该抛弃-ExpressJS-了

作者 Romain Lanz
翻译 New Frontend

Express 长期以来都是 Node.js 生态系统的事实标准。轻易找个学习 Node 的教程,都会介绍 Express。

在最近的 JS 考察中,Express 在各方面都是第一。

尽管如此,Express 并非很棒的技术,本该在 2015 年就停止使用。

不足保护

Express 好多年没有重大更新了, 它的下一个大版本 6 年来始终在 alpha 状态。

人们可能感觉没什么大更新是因为它的 API 曾经稳固,不须要变动了。理论状况是:Express 不晓得如何解决 async/await

又有一个 Nodejs 我的项目举荐在 Express 中间件中应用 async/await。

我看到处都是内存透露。好在从 @nodejs v15 开始 unhandledRejection 会解体…… 这样他们至多在部署到生产环境前能发现问题。

—— Matteo Collina

如果你在路由处理器或中间件里用到了 async/await 代码,就容易碰到 UnhandledPromiseRejectionWarning 异样。Express 不晓得它们,所以不会为你解决这些异样。

Express 仓库里有很多人提到他们遇到了这个问题,比方 #4360、#4348 等等。

你应该分明,从 Node 15 开始,遇到这个异样利用会解体,在 Node 15 之前则会导致内存透露。

应用 async/await 的时候,你总是应该确保承受 AsyncFunction 作为回调。[Broken Promises] 是个很好的对于这一主题的演讲。

小范畴框架

「框架」是个含混的字眼。拿起你的放大镜,你会发现 Express 实际上是一个反对中间件的路由库,但它依然被称为「框架」。

尤雨溪做过一个框架设计如何寻求均衡的十分杰出的演讲,其中提到应该依据范畴来划分框架的类别。

咱们能够将 Express 划分为小范畴框架(low-scope framework)。

创立利用的时候,除了路由零碎,咱们还须要更多个性:

  • 拜访数据库
  • 校验数据
  • 创立身份甄别层
  • 创立鉴权零碎
  • 等等

这些 Express 都没有,你须要自行粘合。

人们费神费劲地粘合模块以解决问题,而不是抉择问题的真正解决方案,看到这些,我总是很诧异。

别再基于路由零碎本人搭建没有文档的框架了,开始做一些真正重要的事吧。

—— Romain Lanz

本人粘合这些模块意味着你须要自行承当内存泄露、安全漏洞、bug 等危险。除此之外,这么做是在浪费时间和金钱,因为你不应该是负责做这些的人。

替代品

替代品有哪些?该举荐人们学哪些框架?

只管我置信不该应用小范畴框架,还是有少部分人喜爱这种格调或者出于学习目标须要这类框架。我会向这些人举荐 fastify。

这个框架保护得很好,而且提供了官网的 Express 兼容层,不便迁徙你的利用。

如果你偏好能让本人专一于业务逻辑的大范畴(high-scope)全功能框架,那么能够应用 AdonisJS。

没有理由持续应用 Express,早换早解脱。

我厌恶 Express 吗?

特此申明,我并不厌恶 Express。这篇文章只是分享我的一些认识,心愿有助于其他人在充沛理解状况的前提下做决定,而不是随大流。

Express 曾是 Node.js 生态系统中的第一框架,许多年来它都施展了微小的作用!但当初是让它服役的时候了。

我心愿能推动 Node.js 生态系统持续向前,帮忙新开发者学习不会原地爆炸的技术。

注:作者 Romain Lanz 是 AdonisJS 开发者之一,本文仅代表作者个人观点。

题图 Thom Holmes

退出移动版