我正在嘗試在 Node.js 中運行 MongoDB。我已經在 C:\mongodb 下安裝了社區服務器版本的 MongoDB (v. 5.0.3)。
在子檔案夾“data”中,我創建了另一個檔案夾“db”,該檔案夾當前為空。
當我在 mongo.exe、Windows 終端甚至 Node.js 的終端中運行 mongoDB 時,似乎一切正常。我可以查看我的資料庫并創建新的資料庫和集合。我還可以在 Compass 中訪問我的資料庫(連接 mongodb://localhost:27017)。
正如我所說,即使我創建了一個新資料庫,我的“data/db”檔案夾還是空的,所以我的資料庫似乎存盤在其他地方。這是一個問題嗎?
在 Node.js 中,我嘗試使用 Mongoose 連接到 MongoDB。我嘗試了幾種不同的方法,取得了不同的成功。此代碼始終相同:
// Dependencies:
const express = require('express')
const app = express()
const mongoose = require('mongoose')
// Validate connection:
mongoose.connection.once('open', () => console.log('Connected do database'))
mongoose.connection.on('error', err => console.error('connection error:', err))
app.listen(5000, () => console.log('Server started'))
此 URL 有效(似乎):
// Connecting to database:
mongoose.connect('mongodb://127.0.0.1:27017/testdb', { useNewUrlParser: true })
在控制臺中,我得到“服務器啟動”,然后是“連接到資料庫”。
但是,YouTube 教程中建議的此 URL 不起作用:
// Connecting to database:
mongoose.connect('mongodb://localhost/testdb', { useNewUrlParser: true })
在控制臺中,我得到“服務器已啟動”但不是“已連接到資料庫”。然后,半分鐘后,應用程式崩潰,我收到以下錯誤訊息(我審查了一些個人資訊):
connection error: MongooseServerSelectionError: connect ECONNREFUSED ::1:27017
at NativeConnection.Connection.openUri (C:\Users\xxx\Documents\xxx\xxx\xxx\node_modules\mongoose\lib\connection.js:797:32)
at C:\Users\xxx\Documents\xxx\xxx\xxx\node_modules\mongoose\lib\index.js:330:10
at C:\Users\xxx\Documents\xxx\xxx\xxx\node_modules\mongoose\lib\helpers\promiseOrCallback.js:32:5
at new Promise (<anonymous>)
at promiseOrCallback (C:\Users\xxx\Documents\xxx\xxx\xxx\node_modules\mongoose\lib\helpers\promiseOrCallback.js:31:10)
at Mongoose._promiseOrCallback (C:\Users\xxx\Documents\xxx\xxx\xxx\node_modules\mongoose\lib\index.js:1151:10)
at Mongoose.connect (C:\Users\xxx\Documents\xxx\xxx\xxx\node_modules\mongoose\lib\index.js:329:20)
at Object.<anonymous> (C:\Users\xxx\Documents\xxx\xxx\xxx\app.js:13:10)
at Module._compile (node:internal/modules/cjs/loader:1095:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1147:10) {
reason: TopologyDescription {
type: 'Unknown',
servers: Map(1) { 'localhost:27017' => [ServerDescription] },
stale: false,
compatible: true,
heartbeatFrequencyMS: 10000,
localThresholdMS: 15,
logicalSessionTimeoutMinutes: undefined
}
}
node:internal/process/promises:246
triggerUncaughtException(err, true /* fromPromise */);
^
MongooseServerSelectionError: connect ECONNREFUSED ::1:27017
at NativeConnection.Connection.openUri (C:\Users\xxx\Documents\xxx\xxx\xxx\node_modules\mongoose\lib\connection.js:797:32)
at C:\Users\xxx\Documents\xxx\xxx\xxx\node_modules\mongoose\lib\index.js:330:10
at C:\Users\xxx\Documents\xxx\xxx\xxx\node_modules\mongoose\lib\helpers\promiseOrCallback.js:32:5
at new Promise (<anonymous>)
at promiseOrCallback (C:\Users\xxx\Documents\xxx\xxx\xxx\node_modules\mongoose\lib\helpers\promiseOrCallback.js:31:10)
at Mongoose._promiseOrCallback (C:\Users\xxx\Documents\xxx\xxx\xxx\node_modules\mongoose\lib\index.js:1151:10)
at Mongoose.connect (C:\Users\xxx\Documents\xxx\xxx\xxx\node_modules\mongoose\lib\index.js:329:20)
at Object.<anonymous> (C:\Users\xxx\Documents\xxx\xxx\xxx\app.js:13:10)
at Module._compile (node:internal/modules/cjs/loader:1095:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1147:10) {
reason: TopologyDescription {
type: 'Unknown',
servers: Map(1) {
'localhost:27017' => ServerDescription {
_hostAddress: HostAddress { isIPv6: false, host: 'localhost', port: 27017 },
address: 'localhost:27017',
type: 'Unknown',
hosts: [],
passives: [],
arbiters: [],
tags: {},
minWireVersion: 0,
maxWireVersion: 0,
roundTripTime: -1,
lastUpdateTime: 4303888,
lastWriteDate: 0,
error: MongoNetworkError: connect ECONNREFUSED ::1:27017
at connectionFailureError (C:\Users\xxx\Documents\xxx\xxx\xxx\node_modules\mongodb\lib\cmap\connect.js:293:20)
at Socket.<anonymous> (C:\Users\xxx\Documents\xxx\xxx\xxx\node_modules\mongodb\lib\cmap\connect.js:267:22)
at Object.onceWrapper (node:events:510:26)
at Socket.emit (node:events:390:28)
at emitErrorNT (node:internal/streams/destroy:164:8)
at emitErrorCloseNT (node:internal/streams/destroy:129:3)
at processTicksAndRejections (node:internal/process/task_queues:83:21)
}
},
stale: false,
compatible: true,
heartbeatFrequencyMS: 10000,
localThresholdMS: 15,
logicalSessionTimeoutMinutes: undefined
}
}
Node.js v17.0.1
[nodemon] app crashed - waiting for file changes before starting...
我的設定是否錯誤,因為我無法在本地主機上訪問 MongoDB?
uj5u.com熱心網友回復:
您的設定是正確的,但localhost似乎決議為您的環回網路設備的 IPv6 IP ::1,而不是 IPv4 地址 ( 127.0.0.1)。默認情況下,MongoDB 系結到 127.0.0.1 地址,我相信,這就是您無法使用該::1地址訪問它的原因。
- 這里有幾個選項:繼續使用 127.0.0.1 IP——為什么不呢?
- 編輯要系結到的 mongodb 配置
::1。 - 改變
localhost決心。在 linux 中,您/etc/hosts為此編輯,不確定 Windows。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/360073.html
上一篇:如何運行存盤在MongoDB檔案中的JavaScript函式
下一篇:按貓鼬中的孫子財產過濾
