制作一个小型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();
});
奇怪的是,如果我使用以下命令通过外壳连接:
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();
})();
任何有关我可能出问题的地方的指针都是很棒的。
答案 0 :(得分:1)
mLab官方文档建议如下进行连接。它必须是异步的,以便等待连接建立,否则客户端将为null,从而引发错误,表明它无法读取null的属性db。
另一方面,您异步拥有useNewUrlParser
,这可能是成功建立连接的关键,请参见this issue
MongoClient.connect(url, { useNewUrlParser: true }).then(client => client.db())