上周在杭州见个独立开发者。他把Mac的屏幕一转,给我看他刚写完的后端服务。全是Express的写法。没有TypeScript。没有依赖注入。甚至连个像样的目录结构都没有——路由文件直接堆在根目录,中间件全是他自己手写的。
他喝了口冰美式,凉得皱眉头。“换啥别的框架啊,这个我闭着眼都能写对,省下来的时间我都能多改两版产品页面。”
被神化也被矮化的技术边界
很多人对Express的认知是两极的:老用户觉得它是无可替代的开发利器,新派开发者觉得它是性能拉胯的过时古董。其实这两种认知都没摸到它的核心——Express从诞生第一天起,就没把“极致性能”当成核心目标。它的核心设计是那个被讲了无数遍的洋葱模型:请求从最外层进入,穿过一层又一层的中间件,每一层都可以选择拦截请求、修改参数、直接返回响应,或者把控制权传给下一层。

很多人拿默认配置的Express跟开了全量优化的Fastify压测,得出“Express性能只有Fastify三分之一”的结论。这公平吗?就像你给家用轿车不换轮胎不换机油,直接拉去赛道跟拆了所有内饰的改装车比圈速。真把Express里那些不必要的中间件全拆了,把路由匹配逻辑做了预编译,它的QPS能摸到Node原生HTTP模块的85%以上,根本没有网传的那么不堪。
它的技术边界其实非常清晰:它不帮你做强制的架构约束,不替你决定项目的目录结构,不要求你必须用TypeScript,甚至连异步上下文的支持都要靠第三方中间件实现。它把所有选择权交还给开发者——你想写得规范就规范,想写得潦草就潦草,没有任何强制要求。
被忽略的存量生态基本盘
现在社区里的舆论全在追新,说Nest是企业级开发的未来,Fastify是性能天花板,Express已经老了。但没人算过一笔账:现在npm上跟Express兼容的中间件总共有多少?从登录鉴权、文件上传、日志采集到参数校验,几乎所有后端开发能遇到的场景,都有写了快十年的稳定实现,根本不需要你从零造轮子。

你现在去翻国内很多中小电商、内容站、SaaS工具的后端代码,会发现一个很有意思的现象:前端框架从Vue2换到Vue3,UI库从Element换到Antd,甚至数据库从MySQL迁到了PostgreSQL,唯独后端那层Express的代码,从2015年跑到现在,从来没动过。为啥?因为稳啊。跑了快十年,哪个接口在什么并发下会出问题,哪个参数有边界情况,哪个第三方接口会超时,全是之前的开发者踩过坑填好的。你要是把它换成新框架,所有的坑得重新踩一遍,算下来的人力成本,比维护现有代码高了十倍都不止。
更有意思的是,现在所有看起来要“替代Express”的新框架,本质上都在兼容Express的生态。Fastify专门做了Express中间件的适配层,让你不用改代码就能把原来的Express逻辑搬过去;Nest的路由系统,本质上也是把Express的中间件逻辑套了个依赖注入的壳子。整个Node.js生态对Express的依赖,早就到了“日用而不知”的程度——如果现在把Express从npm上删掉,至少有四成的现有Node.js项目会直接跑不起来,所有新框架的兼容逻辑都得重写,整个生态至少要倒退两到三年。
藏在代码缝隙里的治理风险

当然,这并不代表Express没有问题。恰恰相反,它现在的状态,本身就是整个开源生态的一个缩影。
现在Express的核心维护团队,算上兼职的志愿者,也就两三个人。距离上一个大版本的发布,已经过去快六年了。之前出过一次路径解析的安全漏洞,从漏洞披露到发布正式补丁,前后花了快两周。这对于跑在Express上的无数生产项目来说,其实是个不小的隐患——你用它是因为它稳,但它的维护力量根本跟不上现在的网络安全需求。
更麻烦的是,很多项目用的Express依赖,是好几年前的老版本,连维护者都联系不上。去年有个做跨境独立站的小团队,就是因为一个2018年的Express上传中间件被投毒,整个网站的支付接口挂了三个小时,损失了十几万。他们不是不知道这个依赖有风险,是那个中间件从项目第一天用到现在,根本没人记得要去更新它,甚至连这个中间件当初是哪个开发者引入的,都已经查不到了。
这是个死循环。很多公司明明知道Express的维护力量不足,还是不敢换。毕竟换框架的成本太高了:要把几百个接口的逻辑全迁移,要做全链路的兼容性测试,要防线上出故障,算下来的人力、时间、故障风险成本,比给Express维护团队捐几万块钱,高了不知道多少倍。
很多人觉得Express会在三五年内被新框架彻底替代。我觉得错了。
它不会死。
未来3年,一定会出现专门的商业团队,给Express提供企业级的付费支持——就像当年RedHat给Linux做商业服务一样。你付年费,我给你出安全补丁,帮你做性能优化,出了线上问题有人兜底。毕竟这么大的存量摆在那里,总有人愿意为“稳”买单。
5年之后,Express会从一个“新项目首选的开发框架”,慢慢变成一个“历史代码兼容层”。新的创业项目、中大型公司的核心系统,不会再选它了。但那些跑了快十年的中小项目,那些没人愿意碰的老代码,还是会靠着Express的兼容层,安安稳稳跑在服务器上。就像现在很多银行系统里还在跑的COBOL代码一样,没人愿意从头写,但没人敢随便动。
上次跟那个独立开发者分开的时候,他说,其实大家都知道新框架好,新框架有TypeScript支持,有更好的性能,有更规范的架构。但写代码这件事,从来不是选最好的工具,是选最顺手的工具。
他说这句话的时候,地铁刚好到站。风从站台吹过来,把他手里的半杯冰美式吹得晃了晃。
作者|大讲堂
排版|大讲堂
审核|阿辰
大讲堂