【问题标题】:Can connect mongodb remotely but not locally with nodejs可以用nodejs远程连接mongodb但不能在本地连接
【发布时间】: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认证-

  1. 在本地机器上使用 nodejs 应用程序
  2. 在本地机器上使用 laravel 应用程序
  3. 适用于托管在 GCP 上的 laravel 应用程序(相同的 mongodb 实例)
  4. 不适用于托管在 GCP 上的 nodejs 应用程序(相同的 mongodb 实例)
  5. 与 cli 配合使用

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

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    这是由于未加载环境变量。尝试控制台记录环境变量并检查日志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-26
      • 1970-01-01
      • 2014-08-06
      • 2017-10-27
      • 1970-01-01
      • 2018-04-19
      相关资源
      最近更新 更多