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

使用Node.js+Mongoose连接MongoDB遇ERR_MODULE_NOT_FOUND错误求助

问题分析与解决方案

错误原因

你遇到的ERR_MODULE_NOT_FOUND错误主要由两个问题导致:

  1. 文件名大小写不匹配:你的数据库配置文件是dbconfig.js(小写字母c),但index.js里导入的路径是./config/dbConfig.js(大写字母C)。Node.js在类Unix系统(比如Linux、macOS)的模块解析是大小写敏感的,这直接导致找不到文件。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:45:02