【问题标题】:How to get a variable from another file after its defined定义后如何从另一个文件中获取变量
【发布时间】:2020-05-02 20:19:11
【问题描述】:

我正在尝试在另一个文件中获取 mongo 客户端。问题是,当我尝试获取 mongoClient 变量时,它返回 undefined。

我如何才能等到 mongoClient 变量声明后再尝试获取它?

文件 1

let mongoClient;

module.exports = async function() {
    const mongooseOptions = {...};
    mongoClient = await mongoose.connect(dbUrl, mongooseOptions);
};

exports.getMongoClient = () => mongoClient;

文件 2

const { getMongoClient } = require('../../startups/db');
console.log(getMongoClient); // Returns undefined

【问题讨论】:

  • 这在您的文件 2 中不起作用 getMongoClient.then(...) 吗?
  • @AhmetZeybek 我收到一条错误消息,提示无法读取未定义的属性 'then'

标签: node.js mongodb mongoose module node-modules


【解决方案1】:

您应该使用 global 变量访问任何文件,如下所示。

文件 1

global.mongoClient;

module.exports = async function() {
    const mongooseOptions = {...};
    global.mongoClient = await mongoose.connect(dbUrl, mongooseOptions);
};

文件 2

console.log(global.getMongoClient);

【讨论】:

    【解决方案2】:

    你应该使用这个逻辑

    文件 1

    const axios = require("axios");
    async function getData() {
      return await axios.get("https://jsonplaceholder.typicode.com/todos");
    }
    module.exports = { getData };
    

    文件 2

    const { getData } = require("./file1");
    getData().then(data => console.log(data));
    

    【讨论】:

    • 这可行,但我想在多个文件中调用它。如果我这样做,那么getData 将在每次调用时重新获取数据,或者在我的情况下,每次调用时 mongodb 都会重新连接,这是不必要的。
    猜你喜欢
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    相关资源
    最近更新 更多