2016-05-02 18 views
0

私はNode.jsを初めて使用しています。Node.jsとMySQLを備えたREST APIについては、インターネットからチュートリアルに従いました。 MySQLが接続をクローズした後、またはタイムアウトが発生した後で、動作させることができません。あなたはどのようにそれが仕事を得るために私のコードを修正するために私を伝えることができます:Node.js MySQLハンドル再接続付きREST

Server.js

私は同じ問題aを持っており、これがかもしれないと思う
var express = require("express"); 
var mysql = require("mysql"); 
var bodyParser = require("body-parser"); 
var rest = require("./REST.js"); 
var app = express(); 

function REST(){ 
    var self = this; 
    self.connectMysql(); 
}; 

REST.prototype.connectMysql = function() { 
    var self = this; 
    var pool  = mysql.createPool({ 
     connectionLimit : 50, 
     host  : 'localhost', 
     user  : 'root', 
     password : '', 
     database : 'quiz', 
     debug : false, 
     multipleStatements: true 
    }); 
    pool.getConnection(function(err,connection){ 
     if(err) { 
      self.stop(err); 
     } else { 
      self.configureExpress(connection); 
     } 
    }); 
} 

REST.prototype.configureExpress = function(connection) { 
     var self = this; 
     app.use(bodyParser.urlencoded({ extended: true })); 
     app.use(bodyParser.json()); 
     var router = express.Router(); 
     app.use('/', router); 
     var rest_router = new rest(router,connection); 
     self.startServer(); 
} 

REST.prototype.startServer = function() { 
     app.listen(3000,function(){ 
      console.log("All right ! I am alive at Port 3000."); 
     }); 
} 

REST.prototype.stop = function(err) { 
    console.log("ISSUE WITH MYSQL n" + err); 
    process.exit(1); 
} 

new REST(); 

REST.js

var mysql = require("mysql"); 
function REST_ROUTER(router,connection) { 
    var self = this; 
    self.handleRoutes(router,connection); 
} 

REST_ROUTER.prototype.handleRoutes= function(router,connection) { 
    router.get("/",function(req,res){ 
     res.json({"Message" : "Hello World !"}); 
    }); 

    router.get("/quiz/cars",function(req,res){ 
     var options = {sql: 'SELECT quiz.quiz_id, quiz_image, quiz_type, choice_id, choice, is_right_choice FROM quiz JOIN quiz_choices ON quiz.quiz_id = quiz_choices.quiz_id WHERE quiz_type="cars";', nestTables: false}; 
     connection.query(options,function(err,rows){ 
      if(err) { 
       res.json({"Error" : true, "Message" : "Error executing MySQL query"}); 
      } else { 
       res.json(rows); 
      } 
     }); 
    }); 
} 

module.exports = REST_ROUTER; 

答えて

4

を溶液。私は自分のコードに以下の変更を加えた:

は、接続プールではなく、self.configureExpress(への接続を渡します)ので...

REST.prototype.connectMysql = function() { 
    var self = this; 
    var pool = mysql.createPool(db_config); 
    self.configureExpress(pool); 
}; 

REST.prototype.configureExpress = function(pool) { 
.... 
    var rest_router = new rest(router,pool,md5); 
.... 
} 

REST.jsのように

var mysql = require("mysql"); 
function REST_ROUTER(router,pool) { 
    var self = this; 
    self.handleRoutes(router,pool); 
} 

REST_ROUTER.prototype.handleRoutes= function(router,pool) { 
    router.get("/",function(req,res){ 
     res.json({"Message" : "Hello World !"}); 
    }); 

    router.get("/quiz/cars",function(req,res){ 
     var options = {sql: 'SELECT quiz.quiz_id, quiz_image, quiz_type, choice_id, choice, is_right_choice FROM quiz JOIN quiz_choices ON quiz.quiz_id = quiz_choices.quiz_id WHERE quiz_type="cars";', nestTables: false}; 
     pool.getConnection(function(err, connection) { 
      connection.query(options,function(err,rows){ 
       connection.release(); 
       if(err) { 
        res.json({"Error" : true, "Message" : "Error executing MySQL query"}); 
       } else { 
        res.json(rows); 
       } 
      }); 
     }); 
    }); 
} 

module.exports = REST_ROUTER; 

connection.release()を呼び出すことを忘れないでください。接続を使用し終わったら、接続プールに戻すことができます。

+0

ありがとうございます@マイケル!これは私が探していたものです。 MySQL接続が接続を閉じたときに、サーバを再起動する必要はありません。 –

関連する問題