请考虑以下代码段,该代码段位于 A.js 文件中。
const connection = {};
mongo_cli.connect(url, (err, db) => {
...
connection['con'] = db;
});
module.exports = {
mongo:{
connection: connection['con'];
}
}
我在 B.js 中执行const database = require('./A').mongo.connection;
。 A和B js文件位于同一目录中。
为什么B文件中的数据库变量未定义?
答案 0 :(得分:1)
这是因为connection['con'] = db
在connect
函数回调的执行上下文中。如果您从外部访问connection['con']
,则可能会不确定。我建议您将Mongoose用于此类实现。这是一个简单的示例:
const mongoose = require('mongoose');
const url = "your_mongodb_url";
const connect = mongoose.connect(url, {
useNewUrlParser: true
});
connect.then((db) => {
console.log('Database Connected');
}, (err) => {
console.log(err);
});
答案 1 :(得分:0)
如果连接成功,U不会变得不确定。因此,为了进行处理,您可以尝试这样的事情。
const connection = {};
connection['con'] = null;
mongo_cli.connect(url, (err, db) => {
...
connection['con'] = db;
});
module.exports = {
mongo:{
connection: connection['con']; // if connection failed then connection['con'] will be null.
}
}
答案 2 :(得分:0)
这是一个回调函数:
(err, db) => {
…
connection['con'] = db;
}
可能会在读取 B.js中的database
变量的代码后 执行。