You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已移除的Express静态资源中间件仍生效,页面资源加载异常求助

解决Express静态资源路由缓存与路径引用问题

看起来你遇到的问题其实是静态资源路径引用错误+浏览器缓存残留导致的,我帮你拆解下原因和解决办法:

问题根源分析

  1. 你之前配置过app.use("/public", express.static(__dirname + '/public')),虽然已经移除,但浏览器可能缓存了旧的资源请求规则;
  2. 你的products.ejs里的静态资源(css、js)用的是相对路径,当路由是/products时,浏览器会自动把路径前缀加上/products,导致请求变成/products/assets/xxx——而你的静态资源中间件是配置的/assets对应根目录的assets文件夹,这个错误路径返回的其实是404页面(HTML格式),所以会触发MIME类型不匹配的报错。

具体解决步骤

  • 强制清除浏览器缓存:按Ctrl+Shift+R(Chrome/Edge)或者Cmd+Shift+R(Safari)强制刷新页面,把之前缓存的旧路由规则清掉。
  • 修改ejs模板里的资源引用为绝对路径:
    把模板里类似这样的相对路径:
    <link rel="stylesheet" href="assets/css/your-style.css">
    <script src="assets/js/vendor/modernizr-2.8.3-respond-1.4.2.min.js"></script>
    
    改成带根路径斜杠的绝对路径:
    <link rel="stylesheet" href="/assets/css/your-style.css">
    <script src="/assets/js/vendor/modernizr-2.8.3-respond-1.4.2.min.js"></script>
    
    这样不管当前路由是/products还是其他,都会从网站根目录去查找assets文件夹下的资源,不会自动加上路由前缀。
  • 确认当前中间件配置的正确性:
    你现在保留的这两个中间件是完全正确的:
    app.use(express.static(__dirname + '/public'));
    app.use("/assets", express.static(__dirname + '/assets'));
    
    第一个负责根路径下的静态资源映射到public文件夹,第二个负责/assets路径映射到根目录的assets文件夹,完全符合你的目录结构。

为什么改路由到/product能正常工作?

这只是巧合——因为你之前没在/product路由下访问过页面,浏览器没有缓存这个路由下的资源路径,所以临时避开了缓存的旧规则,但这不是根本解决办法,还是要修正资源引用路径才行。

内容的提问来源于stack exchange,提问作者Jack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:33:53