This is a Fork of the project https://github.com/pwalczyszyn/express-myconnection
The only difference from the original one is that this module return promises instead of callbacks and additionally this module allows to set 2 different mysql connections for the same express API. This fork was required to support simultaneous connections to 2 different mysql databases (main instance and a read-replica instance), Secondary connection is optional.
Usage
// app.js
...
var mysql = require('mysql'), // node-mysql module
myConnection = require('express-myconnection'), // express-myconnection module
dbOptions = {
host: 'localhost',
user: 'dbuser',
password: 'password',
port: 3306,
database: 'mydb'
};
dbOptionsSecondary = {
host: 'localhost2',
user: 'dbuser2',
password: 'password2',
port: 3306,
database: 'mydb'
};
app.use(myConnection(mysql, 'single', dbOptions, dbOptionsSecondary));
...
express-myconnection extends request
object with getConectionAsync
and getConectionSecondaryAsync
promise functions, this way connection instance can be accessed anywhere in routers during request/response life cycle:
// myroute.js
...
module.exports = function(req, res, next) {
...
req.getConnectionAsync(function(err, connection) {
if (err) return next(err);
connection.query('SELECT 1 AS RESULT', [], function(err, results) {
if (err) return next(err);
results[0].RESULT;
// -> 1
res.send(200);
});
});
...
}
...
// myroute2.js
...
module.exports = function(req, res, next) {
...
req.getConnectionSecondaryAsync(function(err, connection) {
if (err) return next(err);
connection.query('SELECT 1 AS RESULT', [], function(err, results) {
if (err) return next(err);
results[0].RESULT;
// -> 1
res.send(200);
});
});
...
}
...
release connection use req.releaseConnection to manual release a connection // myroute.js ... module.exports = function(req, res, next) { ... req.getConnectionAsync(function(err, connection) { if (err) return next(err); connection.query('SELECT 1 AS RESULT', [], function(err, results) { connection = null; req.releaseConnection(); //manual to release a connection if (err) return next(err); results[0].RESULT; // -> 1 requestUrl(url, function(err, data) { if (err) return next(err); req.getConnection(function(err, connection) { //get a connection again connection.query('SELECT 2 AS RESULT', [], function(err, results) { res.send(200); }); }); }) });
});
...
}
...