簡體   English   中英

可以遠程連接mongodb但不能在本地使用nodejs

[英]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身份驗證-

  1. 與本地機器上的 nodejs 應用程序一起使用
  2. 在本地機器上與 laravel 應用程序一起使用
  3. 與托管在 GCP 上的 Laravel 應用程序一起使用(相同的 mongodb 實例)
  4. 不適用於托管在 GCP 上的 nodejs 應用程序(同一個 mongodb 實例)
  5. 與 cli 一起使用

在本地和 GCP 實例 nodejs - v15.0.0 npm - v6.14.13

這是由於未加載環境變量。 嘗試控制台記錄環境變量並檢查日志。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM