我很好奇 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/