使用Node.js+Mongoose连接MongoDB遇ERR_MODULE_NOT_FOUND错误求助
问题分析与解决方案
错误原因
你遇到的ERR_MODULE_NOT_FOUND错误主要由两个问题导致:
- 文件名大小写不匹配:你的数据库配置文件是
dbconfig.js(小写字母c),但index.js里导入的路径是./config/dbConfig.js(大写字母C)。Node.js在类Unix系统(比如Linux、macOS)的模块解析是大小写敏感的,这直接导致找不到文件。 - ES模块与CommonJS混用:
dbconfig.js开头用了ES模块的import语法,但结尾却用了CommonJS的module.exports导出,两种模块系统混用会引发解析异常。
另外,你原来的连接写法是基于事件监听的回调模式,没有处理异步操作的顺序问题(比如服务器可能在数据库未连接成功时就启动了),改用async/await能更直观地控制流程。
修正步骤及代码
1. 统一文件名与导入路径
先确保文件名和导入路径完全一致:要么把dbconfig.js改名为dbConfig.js,要么把index.js里的导入语句改成import mongoose from './config/dbconfig.js'。
2. 重构数据库连接为async/await模式
修改dbConfig.js(或dbconfig.js),用异步函数封装连接逻辑,同时改用ES模块导出:
import mongoose from 'mongoose'; // 封装异步连接函数 export default async function connectDB() { try { // Mongoose 6+ 已默认启用useNewUrlParser和useUnifiedTopology,无需手动配置 await mongoose.connect(process.env.MONGO_URI); console.log('Connected to Database'); } catch (error) { console.error('Error in connection to Database:', error.message); // 连接失败时退出进程,避免无效服务运行 process.exit(1); } }
3. 修改index.js,确保数据库连接成功后再启动服务器
import express from 'express'; import dotenv from 'dotenv'; import connectDB from './config/dbConfig'; // 路径与文件名保持一致 dotenv.config(); const app = express(); const port = process.env.PORT || 3001; // 先连接数据库,再启动服务器 async function startServer() { await connectDB(); app.listen(port, () => { console.log(`Server running on localhost:${port}`); }); } startServer();
关键说明
- 模块系统统一:全程使用ES模块语法(
import/export),避免和CommonJS(require/module.exports)混用,同时要确保你的package.json里有"type": "module"配置(如果没有的话,添加这一项)。 - 异步流程控制:用
async/await明确控制数据库连接和服务器启动的顺序,避免出现服务器已启动但数据库未连接的异常状态。 - 错误捕获:通过
try/catch捕获连接错误,及时输出日志并退出进程,便于排查问题。
内容的提问来源于stack exchange,提问作者devP
相关产品推荐
相关产品推荐

