本地正常的Node.js应用部署到Render.com时出现模块找不到错误
Node.js部署到Render后启动失败的解决方案
问题情况
本地运行正常的Node.js代码,部署到Render平台后无法启动,报错找不到./User模块。涉及的两个文件userModel.js和User.js位于同一目录。
错误日志
Mar 14 09:11:24 PM ==> Starting service with 'npm start' Mar 14 09:11:27 PM Mar 14 09:11:27 PM > login_schedule@1.0.0 start /opt/render/project/src Mar 14 09:11:27 PM > cross-env ISDEV=true node ./src/app.js Mar 14 09:11:27 PM Mar 14 09:11:33 PM internal/modules/cjs/loader.js:888 Mar 14 09:11:33 PM throw err; Mar 14 09:11:33 PM ^ Mar 14 09:11:33 PM Mar 14 09:11:33 PM Error: Cannot find module './User' Mar 14 09:11:33 PM Require stack: Mar 14 09:11:33 PM - /opt/render/project/src/src/model/userModel.Js Mar 14 09:11:33 PM - /opt/render/project/src/src/controller/registerUserController.js Mar 14 09:11:33 PM - /opt/render/project/src/src/router.js Mar 14 09:11:33 PM - /opt/render/project/src/src/app.js Mar 14 09:11:33 PM at Function.Module._resolveFilename (internal/modules/cjs/loader.js:885:15) Mar 14 09:11:33 PM at Function.Module._load (internal/modules/cjs/loader.js:730:27) Mar 14 09:11:33 PM at Module.require (internal/modules/cjs/loader.js:957:19) Mar 14 09:11:33 PM at require (internal/modules/cjs/helpers.js:88:18) Mar 14 09:11:33 PM at Object.<anonymous> (/opt/render/project/src/src/model/userModel.Js:1:14) Mar 14 09:11:33 PM at Module._compile (internal/modules/cjs/loader.js:1068:30) Mar 14 09:11:33 PM at Object.Module._extensions..js (internal/modules/cjs/loader.js:1097:10) Mar 14 09:11:33 PM at Module.load (internal/modules/cjs/loader.js:933:32) Mar 14 09:11:33 PM at Function.Module._load (internal/modules/cjs/loader.js:774:14) Mar 14 09:11:33 PM at Module.require (internal/modules/cjs/loader.js:957:19) { Mar 14 09:11:33 PM code: 'MODULE_NOT_FOUND', Mar 14 09:11:33 PM requireStack: [ Mar 14 09:11:33 PM '/opt/render/project/src/src/model/userModel.Js', Mar 14 09:11:33 PM '/opt/render/project/src/src/controller/registerUserController.js', Mar 14 09:11:33 PM '/opt/render/project/src/src/router.js', Mar 14 09:11:33 PM '/opt/render/project/src/src/app.js' Mar 14 09:11:33 PM ] Mar 14 09:11:33 PM } Mar 14 09:11:33 PM npm ERR! code ELIFECYCLE Mar 14 09:11:33 PM npm ERR! errno 1 Mar 14 09:11:33 PM npm ERR! login_schedule@1.0.0 start: `cross-env ISDEV=true node ./src/app.js` Mar 14 09:11:33 PM npm ERR! Exit status 1 Mar 14 09:11:33 PM npm ERR! Mar 14 09:11:33 PM npm ERR! Failed at the login_schedule@1.0.0 start script. Mar 14 09:11:33 PM npm ERR! This is probably not a problem with npm. There is likely additional logging output above. Mar 14 09:11:33 PM Mar 14 09:11:33 PM npm ERR! A complete log of this run can be found in: Mar 14 09:11:33 PM npm ERR! /opt/render/.cache/_logs/2023-03-15T00_11_33_673Z-debug.log
问题原因
Render平台使用Linux系统,文件名严格区分大小写;而你的本地环境(如Windows或默认配置的macOS)对文件名大小写不敏感。这导致本地能正常匹配的文件引用,到Linux环境下因大小写不一致找不到模块。
从日志可看出,代码里引用的是./User,但实际部署后的文件存在大小写不匹配情况(比如文件实际是user.js而非User.js,或引用写成./user但文件是User.js)。
解决方案
- 统一文件名与引用的大小写:确保所有文件的命名和代码中的
require引用完全一致,包括字母大小写。- 若模型文件名叫
User.js,则userModel.js里的引用必须是:const User = require('./User') - 若文件名是
user.js,则引用要改成:const User = require('./user')
- 若模型文件名叫
- 排查所有文件的大小写:检查项目中所有文件的命名,避免出现大小写不一致的情况,尤其是跨系统部署时。
代码修正示例
假设模型文件实际是User.js,确保userModel.js的引用正确:
// userModel.js 正确引用 const User = require('./User') // 其余代码保持不变 const getUserByEmail = async(email) =>{ try{ const user = await User.findOne({email}) return user }catch(err){ throw new Error("Ocorreu um erro no servidor") } } // ... 其他函数
内容的提问来源于stack exchange,提问作者Pdtroia
相关产品推荐
相关产品推荐

