Node.js无法访问node_modules文件的问题求助(Express配置无效)
咱们一步步排查和解决这个静态资源加载失败的问题:
1. 修正静态资源的挂载路径映射
你当前的代码app.use(express.static(__dirname + '/node_modules/'))是把node_modules目录直接挂载到了网站根路径(/),这意味着前端应该请求/angular/angular.min.js而非/node_modules/angular/angular.min.js。如果想保留前端原有的请求路径,需要给静态资源指定挂载前缀:
app.use('/node_modules', express.static(__dirname + '/node_modules/'));
这样浏览器请求/node_modules/angular/angular.min.js时,Express就会自动匹配到本地__dirname/node_modules/angular/angular.min.js文件了。
2. 检查__dirname的实际指向
如果你的服务器文件(比如server.js)不在项目根目录(比如放在src/子文件夹里),那__dirname指向的是服务器文件所在的子目录,这时候拼接的路径就会出错。建议用path模块来安全拼接路径:
// 先引入path模块 const path = require('path'); // 如果server.js在src/目录,就向上回退一级找node_modules app.use('/node_modules', express.static(path.join(__dirname, '../node_modules/')));
path.join会自动处理不同系统的路径分隔符,避免手动拼接斜杠的问题。
3. 确认Angular已正确安装
先检查本地node_modules/angular/目录是否存在——如果没执行过安装命令,肯定找不到文件。打开终端执行:
npm install angular --save
安装完成后再确认angular.min.js是否存在于对应路径下。
4. 清除浏览器缓存
有时候浏览器会缓存之前的404请求结果,导致新的请求不生效。试试强制刷新页面(Ctrl+F5),或者清空浏览器缓存后再重新加载。
5. 验证服务器监听端口
你的请求地址是http://localhost:30003/...,要确认Express服务器确实监听的是30003端口,比如服务器代码里有没有这段:
app.listen(30003, () => { console.log('Server running on port 30003'); });
端口不匹配也会导致请求失败。
按照上面的步骤逐一排查,应该就能解决404的问题了。
内容的提问来源于stack exchange,提问作者Uladz Kha

