繁体   English   中英

无法连接到mlab上托管的MongoDB

[英]Failing to connect to MongoDB hosted on mlab

背景

制作一个小型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();
 })();

任何有关我可能会出错的地方的建议都将是很棒的。

官方mLab文档建议如下进行连接。 它必须是异步的,以等待连接发生,否则客户端将为null,从而引发错误,表明它无法读取null的属性db。

另一方面,您异步具有useNewUrlParser ,这可能是成功建立连接的关键,请参见此问题

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM