Express中间件对每个导入的.js文件都执行是否属于正常现象?
核心结论
这是Express中间件的正常运行表现,完全符合框架设计逻辑,不存在任何问题。
原理说明
- 你通过第一个
app.use()注册的是无路径限制的全局中间件,只要是发到当前服务的HTTP请求,不管请求的是什么路径、什么类型的资源,都会在正式处理前先执行这个中间件里的代码。 - 访问根路径
/时的完整请求链路是:- 浏览器第一次发起请求到
/,服务端触发一次日志打印,之后静态资源服务返回public目录下的index.html文件 - 浏览器拿到HTML内容开始解析,发现页面里写了3个
<script>标签需要加载外部JS文件,会自动再发起3个独立的HTTP请求,分别拉取script1.js、script2.js、script3.js - 这3个拉取JS资源的请求到达服务端时,同样会经过你注册的全局日志中间件,每个请求对应一次日志输出
- 浏览器第一次发起请求到
- 算上第一次请求HTML的记录,总共会产生4次中间件执行日志,和你控制台看到的输出完全吻合。
拓展提示
不只是JS文件,所有从当前服务加载的资源——不管是CSS、图片、字体,还是后端接口请求——每一个资源对应一个独立HTTP请求,都会触发匹配规则的中间件。如果不想让静态资源请求触发某类中间件,可以给中间件加上路径匹配规则,或者把这类中间件注册在express.static静态资源服务之后。
内容的提问来源于stack exchange,提问作者Komakino_1251
相关产品推荐
相关产品推荐

