我正在尝试访问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
答案 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"));