如何正确使用module.exports?

时间:2019-12-10 02:14:03

标签: javascript node.js mongodb mongoose mongodb-atlas

我有一个带有module.export的index.js文件,其外观如下:

var databaseInstance, collection;

app.listen(3000, () => {
    MongoClient.connect(CONNECTION_URL, { useNewUrlParser: true, useUnifiedTopology: true }, (error, client) => {
        if(error) {
            console.log(error)
            throw error;
        }
        databaseInstance = client.db(DATABASE_NAME);
        collection = databaseInstance.collection("Users");
    });
});

function GetDatabaseInstance() {

  if (!databaseInstance) {
    console.error("databaseInstance has not been set");
  } else {
    return databaseInstance;
  }
}


 module.exports = {
    GetDatabaseInstance: function() {
     return GetDatabaseInstance(); 
   }

 };

CONNECTION_URL和DATABASE_NAME被硬编码为MongoDB Atlas中的值。我已经验证了databaseInstance不是未定义的。

现在,我希望能够在另一个文件user-ctrl.js(它是一个控制器文件)中使用databaseInstance的值。我将导入index.js如下:

const Index =  require('../index.js')

我试图在此文件中使用函数GetDatabaseInstance(),以便可以访问其中的databaseInstance的值。我这样做如下:

var database = Index.GetDatabaseInstance()

但是我遇到错误:UnhandledPromiseRejectionWarning:TypeError:Index.GetDatabaseInstance不是一个函数

我在这里做错了什么?请帮忙!

1 个答案:

答案 0 :(得分:0)

我将index.js中的功能GetDatabaseInstance导出如下:

exports.GetDatabaseInstance = GetDatabaseInstance;

我将index.js文件导入到另一个文件中,如下所示:

const index =  require('../index')

然后,我使用此导入从索引文件中获取数据库实例,并对其进行查询以从MongoDB中获取我的文档:

var database = index.GetDatabaseInstance() //retrieve the database instance

if(database !== undefined)
var collection = await database.collection("YOUR_COLLECTION_NAME") //retrieve the collection

if(collection !== undefined)
collection.find({"userName" : "USER_NAME"}).toArray((err, user) => { //query the MongoDB collection 
...
})