2016-05-08 217 views

回答

10

只是爲了幫助一些一個在未來,這個工作對我來說:

我創建了一個包含游泳池的MySQL連接文件:

// Load module 
var mysql = require('mysql'); 
// Initialize pool 
var pool  = mysql.createPool({ 
    connectionLimit : 10, 
    host  : '127.0.0.1', 
    user  : 'root', 
    password : 'root', 
    database : 'db_name', 
    debug : false 
});  
module.exports = pool; 

稍後,您可以簡單地包括連接在另一個文件讓通話它manageDB.js:

var pool = require('./mysqlConnector'); 

而且犯了這樣一個可調用的方法:

exports.executeQuery=function(query,callback){ 
    pool.getConnection(function(err,connection){ 
     if (err) { 
      connection.release(); 
      throw err; 
     } 
     connection.query(query,function(err,rows){ 
      connection.release(); 
      if(!err) { 
       callback(null, {rows: rows}); 
      }   
     }); 
     connection.on('error', function(err) {  
       throw err; 
       return;  
     }); 
    }); 
} 
+0

嗨..所以我是新來的節點,所以我有有些疑惑。所以導出函數將在連接器文件中?並調用這個,我將不得不通過我的查詢作爲參數? –

+0

connection.query(...)和connection.on(....)都需要connection.release(); –

4

有一些錯誤在Utkarsh Kaushik solution

  • 如果(ERR),連接無法釋放。 connection.release();

  • 當它有一個錯誤,下一條語句.query總是執行,雖然它得到一個錯誤,並導致應用程序崩潰。

  • 當結果爲空雖然查詢成功,但在這種情況下我們需要檢查結果是否爲空。

該解決方案在我的情況下工作良好:

exports.getPosts=function(callback){ 
    pool.getConnection(function(err,connection){ 
     if (err) { 
      callback(true); 
      return; 
     } 
     connection.query(query,function(err,results){ 
      connection.release(); 
      if(!err) { 
       callback(false, {rows: results}); 
      } 
      // check null for results here 
     }); 
     connection.on('error', function(err) { 
       callback(true); 
       return; 
     }); 
    }); 
}; 
0

您可以創建一個連接文件,讓我們叫dbcon.js

var mysql = require('mysql'); 

// connect to the db 
dbConnectionInfo = { 
    host: "localhost", 
    port: "3306", 
    user: "root", 
    password: "root", 
    connectionLimit: 5, //mysql connection pool length 
    database: "db_name" 
}; 

//For mysql single connection 
/* var dbconnection = mysql.createConnection(
     dbConnectionInfo 
); 

dbconnection.connect(function (err) { 
    if (!err) { 
     console.log("Database is connected ... nn"); 
    } else { 
     console.log("Error connecting database ... nn"); 
    } 
}); 

*/ 

//create mysql connection pool 
var dbconnection = mysql.createPool(
    dbConnectionInfo 
); 

// Attempt to catch disconnects 
dbconnection.on('connection', function (connection) { 
    console.log('DB Connection established'); 

    connection.on('error', function (err) { 
    console.error(new Date(), 'MySQL error', err.code); 
    }); 
    connection.on('close', function (err) { 
    console.error(new Date(), 'MySQL close', err); 
    }); 

}); 


module.exports = dbconnection; 

現在包括這個連接到另一個文件

var dbconnection = require('../dbcon'); 
dbconnection.query(query, params, function (error, results, fields) { 
    //Do your stuff 
}); 
+0

當你調用'connect'cmd或者我不需要這個? –

+0

如果你想檢查你的db連接是否建立,那麼你可以取消註釋已經在代碼中提到的連接cmd,否則不需要使用。 – sumitjainjr