注册

node连接MongoDB数据库错误:MongoServerSelectionError: connect ECONNREFUSED ::1:27017(解决方案)

MongoDB是一种广泛使用的非关系型数据库,现在越来越多的应用程序都使用它来存储数据。Node.js是一种非常受欢迎的服务器端JavaScript框架,它可以很容易地与MongoDB集成。

然而,在使用Node.js连接MongoDB时,经常会遇到“MongoServerSelectionError: connect ECONNREFUSED ::1:27017”这样的错误,通常是由于无法连接到MongoDB服务器而引起的。

下面是解决这个错误的两种方法:

1. 确认MongoDB服务器处于运行状态

首先,我们需要确保MongoDB服务器正在运行。如果没有运行,我们需要启动它。在大多数情况下,MongoDB可以在默认端口27017上运行。

示例1.使用命令行启动MongoDB服务:

mongod 

然后,在另一个终端中,使用mongo命令连接到MongoDB:

mongo 

如果您已经在mongodb中创建了一个名为test的数据库,可以使用以下命令检查数据库的状态:

use test 
db.stats() 

如果您能够成功连接到MongoDB,并且可以看到一个数据库的统计数据,则MongoDB服务器正在运行。

如果您无法在上述步骤中连接到MongoDB,可能会发生其他错误。如果您确定是在正确的机器上运行MongoDB并且没有其他错误,则可能是由于端口号或MongoDB配置文件的不同而导致的问题。

2.正确配置Node.js连接MongoDB

在Node.js中,我们可以使用mongose库来连接MongoDB服务器。确保mongose库已经安装是很重要的。在安装mongose后,我们需要在Node.js应用程序中正确配置MongoDB连接。

以下是示例代码:

const mongoose = require('mongoose');
const options = {
    useNewUrlParser: true,
    useCreateIndex: true,
    useUnifiedTopology: true,
    useFindAndModify: false,
    autoIndex: false, // Don't build indexes
    poolSize: 10, // Maintain up to 10 socket connections
};
const mongoUrl = 'mongodb://localhost:27017/mydb';

mongoose.connect(mongoUrl, options).then(
    () => {
        console.log('MongoDB Connection Succeeded.');
    },
    error => {
        console.log('MongoDB Connection Error: ' + error);
    }
);

请注意,在上面的代码中,我们指定了mongoUrl变量,其中包含我们将连接的MongoDB服务器的URL。options变量包含其他与连接相关的选项。

使用以上配置的必要性是由于,在MongoDB v3.4之后MongoDB驱动的默认项已更改。这可能导致在使用MongoDB时发生错误。因此,使用正确的选项来连接MongoDB是至关重要的。

示例2.使用mongoose连接MongoDB:

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/test', {useNewUrlParser: true});
mongoose.Promise = global.Promise;

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));
db.once('open', function() {
    console.log('MongoDB Connection Succeeded.');
});

以上解决方案是解决“node连接MongoDB数据库错误:MongoServerSelectionError: connect ECONNREFUSED ::1:27017”问题的完整攻略,您可以根据您的需要选择其中任何一个。但请注意,在更改任何代码之前,务必先确认MongoDB服务器正在运行,并使用正确的端口号连接到服务器。