我在db.js中有以下代码:
const mongoClient = require('mongodb').MongoClient;
const dotenv = require("dotenv");
dotenv.config();
const mongoDbUrl = process.env.CONNECTIONSTRING;
mongoClient.connect(mongoDbUrl, { useNewUrlParser: true, useUnifiedTopology: true }, (err, db) => {
module.exports = db;
});
然后我想将它添加到文件user.js的用
const mydb = require("../db");
console.log(mydb);
,但我得到一个空对象:
{}
什么是使User.js接收mydb的正确代码?
顺便说一句,控制台在db.js中记录db会返回我所需要的。
连接异步时,请求是同步的。最终它将在那里,但是您应该做的是导出一个具有异步init函数的对象,然后在启动过程中调用该对象,以确保其余运行代码在此之后发生。本质上,您不应该“运行”模块中的任何代码,而只能导出值。
// db.js
const mongoClient = require('mongodb').MongoClient;
const dotenv = require("dotenv");
class Db {
async init() {
dotenv.config();
const mongoDbUrl = process.env.CONNECTIONSTRING;
this.db = await mongoClient.connect(mongoDbUrl, { useNewUrlParser: true, useUnifiedTopology: true }
}
}
module.exports = new Db()
然后在您的调用代码中:
// main.js
const db = require('./db')
const app = require('./app')
async function main() {
await db.init()
await app.run()
}
main().then(() => console.log('done.')).catch(console.error)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句