[英]Can connect mongodb remotely but not locally with nodejs
我在安裝了mongodb (v4.4.7)
GCP 上有一個ubuntu(20.0.4)
實例。 Mongodb 配置為能夠使用新創建的用戶進行遠程連接。 我的本地機器(Windows 10)上有一個 node js 應用程序和一個 laravel 應用程序。 兩個應用程序(在本地機器上運行)都可以連接到 GCP 提供的 mongodb 實例。 Mongodb node js 版本是4.0.0
,laravel 版本是5.6
。兩者都完全正常。 我可以執行 CRUD 操作。 現在我想在 GCP 實例上測試相同的應用程序。 laravel 應用程序在那里也能完美運行,但 nodejs 在連接到 mongodb 時遇到問題。 它總是拋出以下錯誤 -
MongoDB client failed!
{ MongoServerError: Authentication failed.
at MessageStream.messageHandler (/var/www/api/node_modules/mongodb/lib/cmap/connection.js:470:30)
at MessageStream.emit (events.js:198:13)
at MessageStream.EventEmitter.emit (domain.js:466:23)
at processIncomingData (/var/www/api/node_modules/mongodb/lib/cmap/message_stream.js:108:16)
at MessageStream._write (/var/www/api/node_modules/mongodb/lib/cmap/message_stream.js:28:9)
at doWrite (_stream_writable.js:415:12)
at writeOrBuffer (_stream_writable.js:399:5)
at MessageStream.Writable.write (_stream_writable.js:299:11)
at Socket.ondata (_stream_readable.js:710:20)
at Socket.emit (events.js:198:13)
at Socket.EventEmitter.emit (domain.js:466:23)
at addChunk (_stream_readable.js:288:12)
at readableAddChunk (_stream_readable.js:269:11)
at Socket.Readable.push (_stream_readable.js:224:10)
at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17) ok: 0, code: 18, codeName: 'AuthenticationFailed' }
Nodejs連接Mongodb的部分代碼
const MongoClient = require('mongodb').MongoClient
const user = encodeURIComponent(process.env.MONGO_USER);
const password = encodeURIComponent(process.env.MONGO_PASS);
const address = encodeURIComponent(process.env.MONGO_DB_ADDRESS);
const authMechanism = 'SCRAM-SHA-1';
const authdb = encodeURIComponent(process.env.MONGO_DB_AUTHDB || process.env.MONGO_DB_NAME);
const db = encodeURIComponent(process.env.MONGO_DB_NAME);
const uri = `mongodb://${user}:${password}@${address}/${db}?authMechanism=${authMechanism}&authSource=${authdb}&w=1`;
let client = new MongoClient(uri);
client.connect()
.then( (resp) => {
console.log('Mongo Connected')
next();
})
.catch( (err) => {
console.log("MongoDB client failed!")
next(err);
});
也嘗試將authMechanism
更改為SCRAM-SHA-256
但沒有成功。
總結一下這個問題。 我有一個安裝了 mongodb 服務器的 GCP 實例。 Mongodb身份驗證-
在本地和 GCP 實例 nodejs - v15.0.0
npm - v6.14.13
這是由於未加載環境變量。 嘗試控制台記錄環境變量並檢查日志。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.