【问题标题】:NodeJs - Imported variable is undefinedNodeJs - 导入的变量未定义
【发布时间】:2026-02-08 06:25:01
【问题描述】:

考虑下面的代码 sn-p,它位于 A.js 文件中。

const connection = {};

mongo_cli.connect(url, (err, db) => {
    ...
    connection['con'] = db;
});

module.exports = {
    mongo:{
        connection: connection['con'];
    }
}

我在 B.js 中这样做 const database = require('./A').mongo.connection;。 A和B的js文件在同一个目录。

为什么B文件中的数据库变量未定义?

【问题讨论】:

  • 你确定mongo连接成功,你能在“connect”函数中打印connection['con']的值吗?
  • @Vishal-Lia mongo 连接成功,我确定。

标签: node.js import module export


【解决方案1】:

这是因为connection['con'] = dbconnect 函数回调的执行上下文中。如果您从外部访问connection['con'],您可能会得到未定义。我建议您将 Mongoose 用于此类实现。这是一个简单的例子:

const mongoose = require('mongoose');
const url = "your_mongodb_url";
const connect = mongoose.connect(url, {
  useNewUrlParser: true
});
connect.then((db) => {
    console.log('Database Connected');
}, (err) => {
   console.log(err);
});

【讨论】:

    【解决方案2】:

    如果连接成功,U 将不会未定义。所以为了处理它,你可以尝试这样的事情。

    const connection = {};
    connection['con'] = null;
    mongo_cli.connect(url, (err, db) => {
       ...
    
       connection['con'] = db;
    });
    
    module.exports = {
       mongo:{
           connection: connection['con']; // if connection failed then connection['con'] will be null.
       }
    }
    

    【讨论】:

    • mongo_cli.connect 中的 connection['con'] 的值将是 null 这由于文件中变量的范围。
    【解决方案3】:

    这是一个回调函数:

    (err, db) => {
        …
        connection['con'] = db;
    }
    

    它可能会在读取 B.js 中的database 变量的代码之后执行

    【讨论】: