node.js - mvc - nodejs mysql
Cómo pasar correctamente la conexión de mysql a las rutas con express.js (2)
Encuentro más confiable usar el objeto de grupo node-mysql. Así es como configuré el mío. Utilizo la variable de entorno para la información de la base de datos. Lo mantiene fuera del repositorio.
database.js
var mysql = require(''mysql'');
var pool = mysql.createPool({
host: process.env.MYSQL_HOST,
user: process.env.MYSQL_USER,
password: process.env.MYSQL_PASS,
database: process.env.MYSQL_DB,
connectionLimit: 10,
supportBigNumbers: true
});
// Get records from a city
exports.getRecords = function(city, callback) {
var sql = "SELECT name FROM users WHERE city=?";
// get a connection from the pool
pool.getConnection(function(err, connection) {
if(err) { console.log(err); callback(true); return; }
// make the query
connection.query(sql, [city], function(err, results) {
connection.release();
if(err) { console.log(err); callback(true); return; }
callback(false, results);
});
});
};
Ruta
var db = require(''../database'');
exports.GET = function(req, res) {
db.getRecords("San Francisco", function(err, results) {
if(err) { res.send(500,"Server Error"); return;
// Respond with results as JSON
res.send(results);
});
};
Estoy tratando de encontrar la mejor manera de pasar una conexión mysql (usando node-mysql) entre mis rutas para express.js. Estoy agregando dinámicamente cada ruta (usando un bucle de archivo para cada ruta), lo que significa que no puedo pasar la conexión a las rutas que lo necesitan. Necesito pasarlo a todas las rutas o ninguna. No me gustó la idea de pasarlo a los que no lo necesitan, así que creé un dbConnection.js que las rutas pueden importar individualmente si lo necesitan. El problema es que no creo que lo esté haciendo correctamente. A partir de ahora, mi dbConnection.js contiene:
var mysql = require(''mysql'');
var db = null;
module.exports = function () {
if(!db) {
db = mysql.createConnection({
socketPath: ''/tmp/mysql.sock'',
user: ''*********'',
password: ''*********'',
database: ''**********''
});
}
return db;
};
Y lo estoy importando en cada ruta usando:
var db = require(''../dbConnection.js'');
var connection = new db();
Pero me gustaría hacerlo así:
var connection = require(''../dbConnection.js'');
Cuando lo intento así, sin embargo, recibo un error que dice que la conexión no tiene un método de ''consulta'' cuando intento hacer una consulta.
su solución funcionará si usa db () en lugar de nueva db (), que devuelve un objeto y no la conexión de db
var db = require(''../dbConnection.js'');
//var connection = new db();
var connection = db();