如何用Nodemon连接Mongoose?遇ECONNREFUSED错误求助
Mongoose连接MongoDB报错:ECONNREFUSED ::1:27017
问题详情
我正在学习MongoDB,按照教程步骤通过Mongoose连接数据库,运行nodemon时出现连接错误,已确认MongoDB服务器处于运行状态。
错误日志
PS C:\Users\KIIT\OneDrive\Desktop\MERN\Web Development\Inotebook\inotebook_backend> nodemon .\index.js [nodemon] 3.0.1 [nodemon] to restart at any time, enter `rs` [nodemon] watching path(s): *.* [nodemon] watching extensions: js,mjs,cjs,json [nodemon] starting `node .\index.js` Connected to Mongo Successfully C:\Users\KIIT\OneDrive\Desktop\MERN\Web Development\Inotebook\inotebook_backend\node_modules\mongoose\lib\connection.js:788 err = new ServerSelectionError(); ^ MongooseServerSelectionError: connect ECONNREFUSED ::1:27017 at _handleConnectionErrors (C:\Users\KIIT\OneDrive\Desktop\MERN\Web Development\Inotebook\inotebook_backend\node_modules\mongoose\lib\connection.js:788:11) at NativeConnection.openUri (C:\Users\KIIT\OneDrive\Desktop\MERN\Web Development\Inotebook\inotebook_backend\node_modules\mongoose\lib\connection.js:763:11) { reason: TopologyDescription { type: 'Unknown', servers: Map(1) { 'localhost:27017' => ServerDescription { address: 'localhost:27017', type: 'Unknown', hosts: [], passives: [], arbiters: [], tags: {}, minWireVersion: 0, maxWireVersion: 0, roundTripTime: -1, lastUpdateTime: 5093783, lastWriteDate: 0, error: MongoNetworkError: connect ECONNREFUSED ::1:27017 at connectionFailureError (C:\Users\KIIT\OneDrive\Desktop\MERN\Web Development\Inotebook\inotebook_backend\node_modules\mongodb\lib\cmap\connect.js:367:20) at Socket.<anonymous> (C:\Users\KIIT\OneDrive\Desktop\MERN\Web Development\Inotebook\inotebook_backend\node_modules\mongodb\lib\cmap\connect.js:290:22) at Object.onceWrapper (node:events:628:26) at Socket.emit (node:events:513:28) at emitErrorNT (node:internal/streams/destroy:151:8) at emitErrorCloseNT (node:internal/streams/destroy:116:3) at process.processTicksAndRejections (node:internal/process/task_queues:82:21) { cause: Error: connect ECONNREFUSED ::1:27017 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1494:16) { errno: -4078, code: 'ECONNREFUSED', syscall: 'connect', address: '::1', port: 27017 }, [Symbol(errorLabels)]: Set(1) { 'ResetPool' } }, topologyVersion: null, setName: null, setVersion: null, electionId: null, logicalSessionTimeoutMinutes: null, primary: null, me: null, '$clusterTime': null } }, stale: false, compatible: true, heartbeatFrequencyMS: 10000, localThresholdMS: 15, setName: null, maxElectionId: null, maxSetVersion: null, commonWireVersion: 0, logicalSessionTimeoutMinutes: null }, code: undefined } Node.js v18.16.1 [nodemon] app crashed - waiting for file changes before starting...
相关代码文件
db.js
const mongoose = require('mongoose'); const mongoURI = "mongodb://localhost:27017/" const connectToMongo = async () => { mongoose.connect(mongoURI); console.log("Connected to Mongo Successfully"); } module.exports = connectToMongo
index.js
const connectToMongo = require('./db') connectToMongo();
解决方案
1. 修复异步连接逻辑
你的connectToMongo声明为async函数,但未使用await处理mongoose.connect的异步操作,导致连接未完成就提前打印成功信息,同时没有错误捕获机制。修改db.js:
const mongoose = require('mongoose'); // 替换localhost为127.0.0.1,强制使用IPv4;同时指定目标数据库名(如inotebook) const mongoURI = "mongodb://127.0.0.1:27017/inotebook" const connectToMongo = async () => { try { await mongoose.connect(mongoURI); console.log("Connected to Mongo Successfully"); } catch (error) { console.error("MongoDB连接失败:", error); process.exit(1); // 连接失败时终止进程,避免后续逻辑异常 } } module.exports = connectToMongo
2. 解决IPv6解析问题
Node.js 18及以上版本默认优先将localhost解析为IPv6地址(::1),而多数本地MongoDB实例默认仅监听IPv4地址(127.0.0.1),导致连接被拒绝。将连接字符串中的localhost替换为127.0.0.1即可强制使用IPv4连接。
3. 验证MongoDB监听配置
检查MongoDB配置文件(Windows下通常为C:\Program Files\MongoDB\Server\版本号\bin\mongod.cfg)中的net.bindIp项,确保其值包含127.0.0.1或0.0.0.0(允许所有IP访问)。修改后需重启MongoDB服务。
4. 确认MongoDB服务状态
在命令行执行mongod命令,或通过服务管理器确认MongoDB服务正在运行;也可直接运行mongo或mongosh命令测试是否能成功进入MongoDB shell,排除服务本身的问题。
内容的提问来源于stack exchange,提问作者Sahil
相关产品推荐
相关产品推荐

