简体   繁体   English

带有MySQL句柄的Node.js REST重新连接

[英]Node.js REST with MySQL handle reconnect

I'm new to Node.js I followed tutorial from the internet for REST API with Node.js and MySQL. 我是Node.js的新手,我从Internet上跟随Node.js和MySQL的REST API教程。 I can't get it to work after MySQL closes the connection or timeout occurs. MySQL关闭连接或发生超时后,我无法使其正常工作。 Can you tell me how to modify my code to get it work: 您能否告诉我如何修改代码以使其正常工作:

Server.js Server.js

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 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;

I have the same issue a and think this may be the solution. 我有一个相同的问题,并认为这可能是解决方案。 I made the following changes to my code: 我对代码进行了以下更改:

Pass the connection pool rather than the connection to self.configureExpress() like so... 像这样将连接池而不是连接传递给self.configureExpress()...

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

and

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

REST.js 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;

Don't forget to call connection.release(); 不要忘记调用connection.release();。 after you've finished using the connection so that it can be added back to the connection pool. 使用完连接后,可以将其重新添加到连接池中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM