2016-03-10 35 views
2

我无法在node.js中导出池连接。我想要的是从db.js的池中获取连接并使用它,然后在使用它之后释放它。node.js和mysql连接池不导出

db.js

var mySQL = require('mysql'); 
    var pool = mySQL.createPool({ 
     host: config.host, 
     user: config.user, 
     password: config.password, 
     database: config.database 
    }); 
    var getConnection = function() { 
     pool.getConnection(function(err, connection) { 
      if(err) throw err; 
      return connection; 
     }); 
    }; 
    module.exports.pool = getConnection; 

query.js

var dbSql = require('./db'); 
var userQuery = 'select * from user'; 
var con = dbSql.pool(); 
console.log("con: " + con); //displays undefined 
con.query(userQuery,function(err,user){ 
    con.release(); 
}) 

当我做的console.log( “CON:” + CON)以上;它显示未定义

回答

4

您正在导出一个函数,而不是池本身。此外,getConnection时不接受任何回调:

db.js应该是这样的:

var mySQL = require('mysql'); 
var pool = mySQL.createPool({ 
    host: config.host, 
    user: config.user, 
    password: config.password, 
    database: config.database 
}); 
var getConnection = function (cb) { 
    pool.getConnection(function (err, connection) { 
     //if(err) throw err; 
     //pass the error to the cb instead of throwing it 
     if(err) { 
      return cb(err); 
     } 
     cb(null, connection); 
    }); 
}; 
module.exports = getConnection; 

query.js应该是这样的:

var getConnection = require('./db'); 
getConnection(function (err, con) { 
    if(err) { /* handle your error here */ } 
    var userQuery = 'select * from user'; 
    console.log("con: " + con); //displays undefined 
    con.query(userQuery,function(err,user){ 
    con.release(); 
}); 
+0

谢谢。这是处理连接的更好方法吗? –

+0

有一个问题。这样我们共享一个连接吗? –

+0

@Java_NewBie它们不是相同的连接,除非''''pool.getConnection'''总是返回相同的连接。 db.js不会导出连接,而是一个获取连接的函数 –

2

你的问题是您对JavaScript和Node.js中回调和异步调用的理解。

要理解这个概念检查this article

你将不得不更改您的代码是这样的:

db.js

var mySQL = require('mysql'); 
var pool = mySQL.createPool({ 
    host: config.host, 
    user: config.user, 
    password: config.password, 
    database: config.database 
}); 
module.exports.pool = pool.getConnection; // export the pools getConnection 

query.js

var dbSql = require('./db'); 
var userQuery = 'select * from user'; 
dbSql.pool(function(err, con) { // the function is called when you have a connection 
    if(err) throw err; // or handle it differently than throwing it 
    console.log("con: " + con); // not undefined anymore 
    con.query(userQuery,function(err,user){ 
     con.release(); 
    }) 
});