【问题标题】:not able to acces db() from exported MongoClient module无法从导出的 MongoClient 模块访问 db()
【发布时间】:2022-01-19 17:26:04
【问题描述】:

我无法将客户端从db.js 正确导出到User.js

db.js

const some= MongoClient.connect(process.env.CONNECTIONSTRING).then((client) =>{
    module.exports=client
    const app = require("./app")
    app.listen(process.env.PORT)
})

在这里使用客户端,我可以执行诸如 client.db().collection("users"); 之类的方法;

但我无法使用 user.js

User.js

const usersCollection = require("../db").db().collection("users");

这给出了错误说 const

usersCollection = require("../db").db().collection("users");
                                         ^
TypeError: require(...).db is not a function

【问题讨论】:

标签: javascript node.js mongodb express export


【解决方案1】:

我可能错了,但是在 MongoClient 的回调函数中,第一个参数是错误,第二个参数是 client.(err,client)

所以你是在错误而不是客户端调用 db()

并且还尝试从 Maxime 在评论中提到的全局范围导出

【讨论】:

    【解决方案2】:

    您遇到此问题是因为您正在导入异步内容,并且当您在 1 行中执行此操作时,当您尝试使用 db().collection("users") 调用它时客户端尚未准备好。

    您可以通过将代码更改为以下内容来验证异步是否是问题:

    const temp = require("../db")
    
    setTimeout(() => {
      temp.db().collection("users")
    }, 1000)
    

    您还可以在此处查看如何正确连接数据库的示例https://www.terlici.com/2015/04/03/mongodb-node-express.html

    【讨论】:

    • 这是一个承诺,我的代码在 then() 部分,所以不会出现“客户端未准备好”的情况
    • 实际上是这样,而且看起来你不知道 promise 如何与 commonjs 导出一起工作。如果您尝试过我提供的代码,您会发现您的问题完全是由于异步部分造成的。
    • 另外,您不应该按照您使用它的方式使用连接。您应该连接到数据库一次,并在应用程序的整个生命周期中使用相同的连接。
    猜你喜欢
    • 2020-09-14
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 2021-09-06
    相关资源
    最近更新 更多