Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js导出问题_Javascript_Mysql_Module_Express_Require - Fatal编程技术网

Javascript Node.js导出问题

Javascript Node.js导出问题,javascript,mysql,module,express,require,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'

我对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);
});

谢谢你能解释一下expors=module.exports=connection这个词吗?为什么没有它我就不能工作?谢谢。
exports=module.exports=connection
有点没用。唯一重要的部分是
module.exports=connection
。将其分配给
exports
变量只意味着您可以使用它而不是键入
module.exports
以后到处都是,但因为您再也不这样做了,所以它是无用的。
导出
变量只是当前模块中的常规全局变量。没有什么神奇之处。@user2417731在文档中可以找到一个很好的解释: