javascript - Node.js 导出问题

标签 javascript mysql module express require

我很好奇 NodeJS 导出模块的方式。我知道要导出一个方法,我们写exports关键字.methodname。

但是,我的模块是一个连接:

//Require mysql connector that you installed with npm
var mysql      = require('mysql');

var conn_conf = {
    host     : 'localhost',
    port     : 3306,
    user     : 'root',
    password : 'root',
    database : 'nutrition_tracker'
}

var connection = mysql.createConnection(conn_conf);

connection.connect(function(err) {
    if(err) console.log("Could not connect to DB");
    else{
        console.log("Connected to "+conn_conf.database+' on '+conn_conf.host );

    }
});

然后在需要它的文件中:

var db2 = require('../db/mysql_conn');

console.log(db2)

但每次,db2 都是 {}。我不明白为什么 - 我不应该要求模块给我连接吗?我什至尝试返回模块内的连接,但同样的事情 - db2 是 {}。

最佳答案

在模块文件末尾添加此行:

exports = module.exports = connection;

请注意,您的方法是有缺陷的,因为您不知道 require() 调用返回的连接状态是什么。您可以在连接打开之前发送查询。

更好的方法是导出工厂函数:

exports = module.exports = function(cb) {
   // your code as above
   // ...

   connection.connect(function(err) {
     if(err) {
       console.log("Could not connect to DB");
       cb(err);
     } else {
       console.log("Connected to "+conn_conf.database+' on '+conn_conf.host );
       cb(null, connection);
     }
   });
};

并以这种方式使用它:

var createDb = require('../db/mysql_conn');
createDb(function(err, db2) {
   console.log(db2);
});

关于javascript - Node.js 导出问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19474455/

相关文章:

php - 在 Fedora 上为 PDO-MySQL 设置 SSL

perl - 如何在不安装 CPAN 模块的情况下安装 deps?

python - PyPI个人模块无法被其他用户或我自己导入?

JavaScript - 从 iframe 访问元素

javascript - Typescript,准确表示类方法行为

Mysql FIFO消耗

xml - Netbeans 模块中的 JAXB 绑定(bind)在哪里

javascript - 在 yii2 中的 wbraganca 动态表单中自动填充文本框中的值

javascript - 如何使用 Azure 移动服务中的使用逻辑验证数据

java - 将字符串解析为mysql日期