2013-10-20 173 views
0

我很好奇NodeJS導出模塊的方式。我知道要導出一個方法,我們寫出exports keyword.methodname。Node.js導出問題

然而,我的模塊是一個連接:

//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是{}。

回答

0

在你的模塊文件的末尾添加一行:

exports = module.exports = connection; 

注意,因爲你不知道什麼是你需要()調用返回的連接的狀態你的方法是有缺陷的。您可能會在連接打開之前發送查詢。

一個更好的辦法是導出一個工廠函數:

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); 
}); 
+0

感謝。你能解釋一下expors = module.exports =連接的東西嗎?爲什麼沒有它,我的工作就不行?謝謝。 – user2417731

+1

'exports = module.exports = connection'有點無用。唯一重要的部分是'module.exports = connection'。將它分配給'exports'變量只是意味着你可以使用它而不是在後面遍佈整個地方輸入'module.exports',但是因爲你再也不會這麼做了,所以它沒用。 'exports'變量在當前模塊中只是一個常規的全局變量。沒有什麼神奇的。 – slebetman

+0

@ user2417731一個很好的解釋可以在文檔中找到:http://nodejs.org/api/modules.html –