[英]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.