gpt4 book ai didi

javascript - 无法连接到 mlab 上托管的 MongoDB

转载 作者:行者123 更新时间:2023-12-03 00:40:57 25 4
gpt4 key购买 nike

背景

制作一个小型 Web 应用程序,连接到 Mlab 托管的 Mongo DB 。我已经在 mlab 上创建了数据库,并创建了具有读/写权限的用户。我还创建了一个包含多条记录的 users 集合。

问题

当我尝试使用 mongo.github.io 上的代码连接到数据库时,我遇到了错误:

/home/ed/dev/mongo-demo/node_modules/mongodb/lib/operations/mongo_client_ops.js:466
throw err;
^

TypeError: Cannot read property 'db' of null

代码

var MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://<user>:<pass>@ds115434.mlab.com:15434';

// Database Name
const dbName = 'princee3-music';

// Use connect method to connect to the server
MongoClient.connect(url, function(err, client) {
console.log("Connected successfully to server");

const db = client.db(dbName);

client.close();
});

我尝试过的

奇怪的是,如果我使用以下命令通过 shell 进行连接:

mongo ds115434.mlab.com:15434/princee3-music -u <dbuser> -p <dbpassword>

效果很好,或者如果我将连接包装在匿名自调用异步函数中,它也会连接。

异步包装器

const MongoClient = require('mongodb').MongoClient;
const mongoUrl = 'mongodb://<user>:<pass>@ds115434.mlab.com:15434/';
const dbName = 'princee3-music';

(async() => {
const client = await MongoClient.connect(mongoUrl, { useNewUrlParser: true});
const db = client.db(dbName);
db.collection('users').insertOne({
email: user.email,
pass: hashedPassword,
admin: true
}, (err, result) => {
if (err) {
reject({error: err});
} else {
resolve({message: 'okay'});
}
});
client.close();
})();

任何关于我可能出错的地方的指示都会很好。

最佳答案

官方 mLab 文档建议按如下方式连接。它必须是异步的,以便等待连接发生,否则客户端将为空,从而抛出一个错误,指出它无法读取空的属性数据库。

另一方面,您的异步有 useNewUrlParser 这可能是成功连接的关键,请参阅 this issue

MongoClient.connect(url, { useNewUrlParser: true }).then(client => client.db())

关于javascript - 无法连接到 mlab 上托管的 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53467825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com