sakib11:
Yo uso mysql (sin sequelize) y en general crear la conexión en una función module.export que luego requieren de otros archivos, así:
var db;
module.exports={
getConnection = function (){return new Promise(function(resolve, reject){
// db = mysql connection stuff
resolve(db)
});},
//other database related operations similarly
}
Ahora, quiero separar todo lo que por ejemplo, yo quiero tener un UserModel que tendrá unas pocas operaciones de bases de datos relacionadas con los usuarios que se acaba de importar la conexión db y así sucesivamente; Pero ¿cuál es la mejor manera de lograr esto? Gracias.
dusthaines:
Dado que se utiliza de manera amplia y no presenta un alto riesgo de conflicto variable de nombres, prefiero agregarlo al objeto global. Entonces nunca tiene que asegurarse de que está siendo incluido, pasó, o importado de un módulo.
Consideremos el siguiente ejemplo:
// in your application initialization file such as app.js
// require items …
const mysql = require('mysql');
const connection = mysql.createPool({
connectionLimit: 10,
host: process.env.DB_HOST || '127.0.0.1',
user: process.env.DB_USER || 'local_user',
password: process.env.DB_PASSWORD || 'local_password',
database: process.env.DB_NAME || 'local_database',
multipleStatements: true,
charset: 'utf8mb4' // necessary if you might need support for emoji characters
});
connection.on('connection', function (connection) {
// handy for testing
console.log('Pool id %d connected', connection.threadId);
});
connection.on('enqueue', function () {
// handy for testing
console.log('Waiting for available connection slot');
});
// make the connection global via the the variable db
global.db = connection;
// everywhere else in your app, use the now global db variable when running queries
db.query(
'INSERT INTO users SET ?', [{name: "John Smith"}], function(error, results, fields) {
if (error) throw error;
console.log(results);
});
}