Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 模块将mongodb导出到另一个文件-哪种方法正确?(在nodejs中)_Node.js_Mongodb_Require_Module.exports - Fatal编程技术网

Node.js 模块将mongodb导出到另一个文件-哪种方法正确?(在nodejs中)

Node.js 模块将mongodb导出到另一个文件-哪种方法正确?(在nodejs中),node.js,mongodb,require,module.exports,Node.js,Mongodb,Require,Module.exports,我在db.js中有以下代码: const mongoClient=require'mongodb'。mongoClient; const dotenv=requiredotenv; dotenv.config; const mongoDbUrl=process.env.CONNECTIONSTRING; mongoClient.connectmongoDbUrl,{useNewUrlParser:true,useUnifiedTopology:true},err,db=>{ module.exp

我在db.js中有以下代码:

const mongoClient=require'mongodb'。mongoClient; const dotenv=requiredotenv; dotenv.config; const mongoDbUrl=process.env.CONNECTIONSTRING; mongoClient.connectmongoDbUrl,{useNewUrlParser:true,useUnifiedTopology:true},err,db=>{ module.exports=db; }; 然后,我想将它添加到文件User.js中

,但我得到一个空对象:

{}

让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)

谢谢,但是我在main.thenresult=>console.logresult中得到了一个“未定义”的响应;一定是出了什么事在这种情况下,main的结果将是未定义的。。。但是您使用的是异步/等待吗?这主要是psuedo代码。祝你好运
// 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)