通过localhost:27017连接MongoDB被拒绝



我正在使用MERN堆栈构建一个应用程序。我正在尝试通过localhost:27017方法连接MongoDB。当我运行node app.js时,我的应用程序会打开,我可以通过在浏览器中访问localhost:4000来访问它,但当它试图连接到数据库时,它就会挂断并抛出以下错误:

Oh no Mongo Connection error!!
MongooseServerSelectionError: connect ECONNREFUSED ::1:27017
at Connection.openUri (C:UsersstephOneDriveDocumentsGitHubCRM-Toolnode_modulesmongooselibconnection.js:819:32)
at C:UsersstephOneDriveDocumentsGitHubCRM-Toolnode_modulesmongooselibindex.js:378:10
at C:UsersstephOneDriveDocumentsGitHubCRM-Toolnode_modulesmongooselibhelperspromiseOrCallback.js:32:5
at new Promise (<anonymous>)
at promiseOrCallback (C:UsersstephOneDriveDocumentsGitHubCRM-Toolnode_modulesmongooselibhelperspromiseOrCallback.js:31:10)
at Mongoose._promiseOrCallback (C:UsersstephOneDriveDocumentsGitHubCRM-Toolnode_modulesmongooselibindex.js:1223:10)
at Mongoose.connect (C:UsersstephOneDriveDocumentsGitHubCRM-Toolnode_modulesmongooselibindex.js:377:20)
at Object.<anonymous> (C:UsersstephOneDriveDocumentsGitHubCRM-Toolapp.js:16:10)
at Module._compile (node:internal/modules/cjs/loader:1112:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1166:10) {
reason: TopologyDescription {
type: 'Unknown',
servers: Map(1) { 'localhost:27017' => [ServerDescription] },
stale: false,
compatible: true,
heartbeatFrequencyMS: 10000,
localThresholdMS: 15,
logicalSessionTimeoutMinutes: undefined
},
code: undefined
}

我已经在我的机器上安装了MongoDB,我有mongod.exe二进制文件。我还制作了文件夹C:\data\db,因为我想这是mongod.exe存储数据的默认位置,所以它必须存在。我还安装了MongoDB Compass,可以通过27017端口进行连接,并创建了我在代码中指定的/crm数据库。当我已经有能力通过Compass进行连接时,我觉得上面提到的cmd连接方法实际上是多余的。我只是沿着这条路走,看看它是否能解决问题,但它没有。这是我的app.js代码:

require('dotenv').config()
const express = require('express');
const app = express();
const path = require('path');
const ejs = require('ejs');
const ejsMate = require('ejs-mate');
const mongoose = require('mongoose');
const methodOverride = require('method-override'); //to be able to use app.put
// require routes USER, PRODUCT, CUSTOMER, SUPPLIER
const productRoutes = require('./routes/products');
const supplierRoutes = require('./routes/supplier');
const customerRoutes = require('./routes/customer')
// mongoose.connect(process.env.DATABASE_URL, { useNewUrlParser: true })
mongoose.connect('mongodb://localhost:27017/crm', { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => {
console.log("Mongo connection open!!!");
})
.catch((err) => {
console.log("Oh no Mongo Connection error!!");
console.log(err);
})

// Static Files
app.use(express.static(path.join(__dirname, 'public')));

// ejs allows us to use javascript codes within html files
app.set('view engine', 'ejs');
app.engine('ejs', ejsMate);
// to setup the path
app.set('views', path.join(__dirname, 'views'));
// Parsing Middleware
app.use(express.urlencoded({extended:true}))
app.use(methodOverride('_method'));
// To use the exported routes
app.use('/dashboard/products', productRoutes);
app.use('/dashboard/suppliers', supplierRoutes);
app.use('/dashboard/customers', customerRoutes);
// show routes for REGULAR PAGES
app.get('/', (req, res) => {
res.render('main');
});
app.get('/login', (req, res) => {
res.render('login');
})
// this is just for designing purposes,
// must be deleted once deployed because dashboard must depend on who was logged in
app.get('/dashboard', (req, res) => {
res.render('dashboard');
})
app.post('/dashboard', (req, res) => {
console.log('you are logged in')
res.render('dashboard');
})
// CUSTOMER'S SECTION
app.get('/dashboard/customers', (req, res) => {
res.render('pages/customers/show');
})

app.listen(4000, () => {
console.log('Serving port 4000')
});

正如我所说,该应用程序通过端口4000显示在我的浏览器中,但数据库从未启动和运行。它只是超时并抛出上面的错误消息。我只想让我的应用程序连接到localhost:27017数据库,这样我就可以开始向服务器发送数据了。谢谢

您的mongodB可能没有运行。

这里也提出了类似的问题,并且已经得到了回答。

MongoError:连接ECONNREFUSED 127.0.0.1:27017

最新更新