使用Node.js连接到远程MongoDB

5
我有一个远程Mongo服务器,想要使用Node.js连接它。我尝试使用Mongo Shell直接连接,连接成功。但是我无法在Node.js中连接到该MongoDB服务器。
用于连接的Mongo命令如下:
mongo --host 192.168.10.33 --port 27017 -u mohammad -p "mypassw@12" --authenticationDatabase=access
我只想将该命令转换为Node.js连接配置,类似于: uri = mongodb://mohammad:mypassw@12@192.168.10.33:27017/"

1
这是MongoDB文档: https://docs.mongodb.com/manual/reference/connection-string/ - Mathieu Seiler
3个回答

1

连接到远程Mongo有时可能会很棘手,mongoose可以帮助您连接到远程数据库。下面的代码应该能够完成连接。

const mongoose = require('mongoose');
mongoose.set('useFindAndModify', false);
const uri = "mongodb+srv://user:pass@clusterName.d4zrk.mongodb.net/databaseName?retryWrites=true&w=majority";

mongoose.connect(uri, { useNewUrlParser: true, useUnifiedTopology: true })

const db = mongoose.connection

db.on('error', (err) => {
    console.log(err)
})
db.once('open', () => {
    console.log('Database Connection Established!')
})

1

URI应该被编码

uri = "mongodb://mohammad:mypassw%4012@192.168.10.33:27017/access"

mongo.connect(uri, { useNewUrlParser: true }, (err, db) => {});

你需要在结尾处使用 access 数据库,否则它将会对 admin 进行身份验证并出现错误。 - user12582392
我尝试了一下,它显示UnhandledPromiseRejectionWarning: MongoError: Authentication failed - Mond666
我也尝试过 ....:27017/access....:27017/mydbname,但都没有成功。 - Mond666
1
可能是密码问题。 - Vishnudev Krishnadas
用%40替换@就足够了吗?我是JS新手,可以在简单字符串中使用%40编码吗?例如“mypassw%4012”。 - Mond666

0
我猜问题可能出在你的密码上,看起来它包含了一个特殊字符,这个字符被mongodb驱动程序用来分隔凭据和主机。

mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]

如果您的密码中包含 @ 符号,则必须应用 百分号编码,即添加一个 % 字符。
根据 mongodb 驱动程序文档,以下是需要进行编码的字符列表:: / ? # [ ] @

我尝试了下面的代码,但它仍然无法工作..url = "mongodb://mohammad:mypassw%4012@192.168.10.33:27017/mydbname" - Mond666

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接