HTML5教程

都 2021 年了,也该抛弃 ExpressJS 了

本文主要是介绍都 2021 年了,也该抛弃 ExpressJS 了,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
作者 Romain Lanz
翻译 New Frontend

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

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

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

这篇关于都 2021 年了,也该抛弃 ExpressJS 了的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!