部署Express.js网站至Railway时遇模块找不到错误求助
问题原因及解决办法
常见原因
- 文件名大小写不匹配:本地系统(Windows/macOS)默认不区分文件名大小写,但Railway使用Linux服务器,严格区分大小写。比如你本地写
./models/product能找到Product.js,但Linux会直接报错找不到。 - 模型文件未被提交到Git:可能你的
.gitignore规则把models目录或product.js排除了,导致部署时文件没上传到Railway服务器。 - 工作目录差异导致路径解析错误:本地运行时的工作目录和Railway启动项目时的工作目录不一致,相对路径解析出错。
对应解决办法
- 统一路径与文件名大小写:检查
models目录下的文件名(比如是product.js还是Product.js),然后把index.js里的引用路径改成完全一致的大小写,比如文件是Product.js就写const Product = require('./models/Product');。 - 修复.gitignore并重新提交:打开项目根目录的
.gitignore文件,确认没有包含models/或product.js这类规则。如果有,删除对应的行,然后执行以下命令重新提交推送:
之后Railway会重新拉取代码部署。git add . git commit -m "fix: include model files in repo" git push - 使用绝对路径引用模块:修改
index.js里的模块引用代码,用Node.js的path模块生成绝对路径,避免工作目录影响:const path = require('path'); const Product = require(path.resolve(__dirname, './models/product'));__dirname会指向当前index.js所在的目录,path.resolve会生成可靠的绝对路径。
内容的提问来源于stack exchange,提问作者ESAR0
相关产品推荐
相关产品推荐

