【发布时间】:2021-07-16 17:08:30
【问题描述】:
我在 GCP 上有一个 ubuntu(20.0.4) 实例,并安装了 mongodb (v4.4.7)。
Mongodb 配置为能够使用新创建的用户进行远程连接。
我的本地机器(Windows 10)上有一个节点 js 应用程序和一个 laravel 应用程序。这两个应用程序(在本地机器上运行)都可以连接到从 GCP 服务的 mongodb 实例。
Mongodb 节点 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认证-
- 在本地机器上使用 nodejs 应用程序
- 在本地机器上使用 laravel 应用程序
- 适用于托管在 GCP 上的 laravel 应用程序(相同的 mongodb 实例)
- 不适用于托管在 GCP 上的 nodejs 应用程序(相同的 mongodb 实例)
- 与 cli 配合使用
在本地和 GCP 实例上
nodejs - v15.0.0
npm - v6.14.13
【问题讨论】: