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

本地MongoDB与Mongoose连接失败问题求助

解决本地MongoDB连接失败及/admin路由加载停滞问题

从你提供的代码和MongoDB Compass截图来看,数据库服务本身正常(截图显示本地27017端口连接正常),问题集中在代码逻辑层面,以下是具体问题和修复方案:

核心问题及修复

  • 异步函数未执行:你定义了自执行异步函数,但末尾未添加()调用,导致路由处理逻辑完全未运行,页面持续等待响应。
    修复:在函数定义末尾补充执行符:

    (async function mongo(){
        // 原有逻辑
    })() // 新增()执行函数
    
  • Mongoose与原生驱动混用错误:mongoose.connect返回的是Mongoose连接实例,并非MongoDB原生Client,无法直接调用client.db(dbName)。你有两种调整方向:

    1. 改用MongoDB原生驱动连接:
      // 替换mongoose引入为原生驱动
      const { MongoClient } = require('mongodb');
      // 连接逻辑修改为
      client = await MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true });
      
    2. 使用Mongoose Model操作数据:先定义User Schema和Model,再调用insertMany方法。
  • 响应发送方式错误:res.json = response是赋值操作,并未向客户端发送响应,必须调用res.json(response)方法:

    res.json(response);
    
  • 错误处理未返回响应:catch块仅打印错误,但未给客户端返回错误信息,导致页面持续加载。需补充响应逻辑:

    catch (error){
        debug(error.stack);
        res.status(500).json({ error: error.message });
    }
    
  • 未关闭数据库连接:操作完成后需关闭连接避免资源泄漏,可在finally块中处理:

    finally {
        if (client) {
            await client.close();
        }
    }
    

修复后完整代码示例

const express = require('express');
const debug = require('debug')('app:adminRouter');
const { MongoClient } = require('mongodb');
const users = require('../data/users.json');

const adminRouter = express.Router();

adminRouter.route('/').get(async (req, res) => {
    const url = "mongodb://localhost:27017";
    const dbName = "workplace_incident_reporter";
    let client;

    try {
        client = await MongoClient.connect(url, 
            { useNewUrlParser: true, useUnifiedTopology: true });
        debug('Connected to mongoDB');

        const db = client.db(dbName);
        const response = await db.collection('Users').insertMany(users);
        res.json(response);
    } catch (error){
        debug(error.stack);
        res.status(500).json({ error: '数据库操作失败', details: error.message });
    } finally {
        if (client) {
            await client.close();
            debug('MongoDB连接已关闭');
        }
    }
});

module.exports = adminRouter;

补充:从MongoDB Compass截图可见,本地MongoDB服务运行正常,端口27017可正常访问,无需排查数据库服务启动问题。

内容的提问来源于stack exchange,提问作者code writer 3000

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:15:41