【发布时间】:2020-05-11 17:04:54
【问题描述】:
我也想在其他模块中使用 mongodb 连接,所以我选择了这种方法。 是否有任何缺点或我应该注意的事情。 我将在我的 app.js 文件中需要这个文件。 或者有没有其他优雅的方式来做同样的事情。
const uri = "mongodb://localhost";
const MongoClient = require('mongodb').MongoClient;
const client = new MongoClient(uri, { useNewUrlParser: true });
db = null ;
client.connect().then(()=>{
db = client.db("mydb");
db.collection("users").createIndex({ mobno: 1 }, { sparse: true, unique: true });
}).catch((error)=>{
db = error;
});
while(true){
if (db!=null){
module.exports = db;
break;
}
}
【问题讨论】:
-
那个繁忙的循环有什么用?
-
这有很多问题。对于初学者,您的
while(true)循环会阻塞事件循环,因此db永远无法获得值,因此您的循环永远不会完成。你真的运行过这个吗?这将只是一个无限循环。在我们拥有与模块初始化(正在处理)一起使用的顶级await之前,您不能直接导出异步获得的值。相反,您可以导出一个承诺,而调用者必须使用该承诺来获取数据库。或者导出一个返回承诺的函数。 -
那是因为当我在其他模块中使用连接时我不希望 null 。当我在 app.js 中需要这个模块时,我会确保我的连接已打开
-
我猜@jfriend00 是对的,我会阻止事件循环,db 永远不会得到它的价值
标签: node.js mongodb node-modules