本地MongoDB与Mongoose连接失败问题求助
解决本地MongoDB连接失败及/admin路由加载停滞问题
从你提供的代码和MongoDB Compass截图来看,数据库服务本身正常(截图显示本地27017端口连接正常),问题集中在代码逻辑层面,以下是具体问题和修复方案:
核心问题及修复
异步函数未执行:你定义了自执行异步函数,但末尾未添加
()调用,导致路由处理逻辑完全未运行,页面持续等待响应。
修复:在函数定义末尾补充执行符:(async function mongo(){ // 原有逻辑 })() // 新增()执行函数Mongoose与原生驱动混用错误:
mongoose.connect返回的是Mongoose连接实例,并非MongoDB原生Client,无法直接调用client.db(dbName)。你有两种调整方向:- 改用MongoDB原生驱动连接:
// 替换mongoose引入为原生驱动 const { MongoClient } = require('mongodb'); // 连接逻辑修改为 client = await MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }); - 使用Mongoose Model操作数据:先定义User Schema和Model,再调用
insertMany方法。
- 改用MongoDB原生驱动连接:
响应发送方式错误:
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
相关产品推荐
相关产品推荐

