node.js未连接到mongodb云服务器

时间:2018-12-30 19:05:17

标签: javascript node.js mongodb

我正在尝试访问mongodb(Atlas),但未成功。 在mongodb云上,数据库名称为star,集合名称为clc。但是,我无法读取错误消息为空的属性

const MongoClient = require('mongodb').MongoClient;


const uri = "mongodb+srv://daww:<PASSWORD>@cluster0-fmmcx.mongodb.net/test?retryWrites=true"
MongoClient.connect(uri, function(err, client) {
   if(err) {
        console.log('Error occurred while connecting to MongoDB Atlas...\n',err);
   }
   console.log('Connected...');
   const collection = client.db("star").collection("clc");

   client.close();
});

我遇到以下错误。

 const collection = client.db("star").collection("clc");
                             ^
TypeError: Cannot read property 'db' of null

更新: 我更新了网址,如下所示

const uri = "mongodb://daww:pass@cluster0-shard-00-00-fmmcx.mongodb.net:27017/star?retryWrites=true"

现在我收到此错误

Error occurred while connecting to MongoDB Atlas...
 { MongoNetworkError: connection 0 to cluster0-shard-00-00-fmmcx.mongodb.net:27017 closed
    at Socket.<anonymous> (/Users/th/Desktop/main/node_modules/mongodb-core/lib/connection/connection.js:276:9)
    at Object.onceWrapper (events.js:273:13)
    at Socket.emit (events.js:182:13)
    at TCP._handle.close (net.js:606:12)
  name: 'MongoNetworkError',
  errorLabels: [ 'TransientTransactionError' ],
  [Symbol(mongoErrorContextSymbol)]: {} }
Connected...
/Users/th/Desktop/main/node_modules/mongodb/lib/operations/mongo_client_ops.js:466
      throw err;
      ^

  TypeError: Cannot read property 'db' of null

3 个答案:

答案 0 :(得分:0)

这里有几处错误。首先,client为null,因此在这种情况下应定义err,它应注销一条错误消息。另外,如果定义了错误,请确保返回:

if(err) {
    return console.log('Error occurred while connecting to MongoDB Atlas...\n',err);
}

MongoClient的第二个连接回调为defined,如下所示

  

这将在执行此方法后调用。如果发生错误,第一个参数将包含Error对象,否则将为null。第二个参数将包含初始化的db对象;如果发生错误,则为null。

那为什么它是数据库对象而不是客户端实例?这是因为connect使用定义为here

的连接URL语法
  

mongodb:// [用户名:密码@] host1 [:port1] [,host2 [:port2],... [,hostN [:portN]]] [/ [数据库] [?选项]]

在连接字符串中包含数据库名称。

如果要建立客户端连接,请使用MongoClient.open

答案 1 :(得分:0)

尝试添加IP白名单。

转到您的群集->安全-> IP白名单->在右侧,您将看到添加IP地址,单击它,然后单击添加当前IP地址。

请注意,这会将您的数据库访问权限仅限制为您的IP。

答案 2 :(得分:-1)

您应该使用我以前用于连接MongoDB服务器的这种模式。

// Mlab Mongoose setup
const dbadd = require("./helpers/keys").mongoURI;
mongoose.connect(dbadd);
mongoose.Promise = global.Promise;
const db = mongoose.connection;

db.on("error", console.error.bind(console, "MongoDB connection error"));