práctico nodejs node ejemplos ejemplo desde conexión conectar con cero mysql node.js express node-modules

ejemplos - Cómo proporcionar una conexión de base de datos mysql en un solo archivo en nodejs



node js ejemplos (5)

Desde la documentación de node.js, "Para que un módulo ejecute código varias veces, exporte una función y llame a esa función", puede usar node.js module.export y tener un solo archivo para administrar las conexiones de db. Puede encontrar más en la documentación de Node.js Digamos que el archivo db.js sería como:

const mysql = require(''mysql''); var connection; module.exports = { dbConnection: function () { connection = mysql.createConnection({ host: "127.0.0.1", user: "Your_user", password: "Your_password", database: ''Your_bd'' }); connection.connect(); return connection; } };

Entonces, el archivo donde vas a usar la conexión podría ser como useDb.js:

const dbConnection = require(''./db''); var connection; function callDb() { try { connection = dbConnectionManager.dbConnection(); connection.query(''SELECT 1 + 1 AS solution'', function (error, results, fields) { if (!error) { let response = "The solution is: " + results[0].solution; console.log(response); } else { console.log(error); } }); connection.end(); } catch (err) { console.log(err); } }

Necesito proporcionar la conexión mysql para los módulos. Tengo un código como este.

var express = require(''express''), app = express(), server = require(''http'').createServer(app); var mysql = require(''mysql''); var connection = mysql.createConnection({ host : ''127.0.0.1'', user : ''root'', password : '''', database : ''chat'' }); connection.connect(function(err) { if (err) { console.error(''error connecting: '' + err.stack); return; } }); app.get(''/save'', function(req,res){ var post = {from:''me'', to:''you'', msg:''hi''}; var query = connection.query(''INSERT INTO messages SET ?'', post, function(err, result) { if (err) throw err; }); }); server.listen(3000);

Pero cómo proporcionamos una conexión mysql única para todos los módulos.


Puede crear un contenedor db y luego requerirlo. node require devuelve la misma instancia de un módulo cada vez, por lo que puede realizar su conexión y devolver un controlador. De los documentos de Node.js :

cada llamada a require (''foo'') obtendrá exactamente el mismo objeto devuelto, si se resolvería en el mismo archivo.

Puede crear db.js :

var mysql = require(''mysql''); var connection = mysql.createConnection({ host : ''127.0.0.1'', user : ''root'', password : '''', database : ''chat'' }); connection.connect(function(err) { if (err) throw err; }); module.exports = connection;

Luego en tu app.js , simplemente lo requerirías.

var express = require(''express''); var app = express(); var db = require(''./db''); app.get(''/save'',function(req,res){ var post = {from:''me'', to:''you'', msg:''hi''}; db.query(''INSERT INTO messages SET ?'', post, function(err, result) { if (err) throw err; }); }); server.listen(3000);

Este enfoque le permite abstraer cualquier detalle de conexión, ajustar todo lo demás que desee exponer y requerir db toda la aplicación mientras mantiene una conexión con su base de datos gracias a la forma en que el nodo requiere trabajo :)


Tomé un enfoque similar al de Sean3z, pero en cambio tengo la conexión cerrada cada vez que hago una consulta.

Su forma funciona si solo se ejecuta en el punto de entrada de su aplicación, pero digamos que tiene controladores que quiere hacer una var db = require(''./db'') . No puede porque de lo contrario, cada vez que acceda a ese controlador, creará una nueva conexión.

Para evitar eso, creo que es más seguro, en mi opinión, abrir y cerrar la conexión cada vez.

aquí hay un fragmento de mi código.

mysq_query.js

// Dependencies var mysql = require(''mysql''), config = require("../config"); /* * @sqlConnection * Creates the connection, makes the query and close it to avoid concurrency conflicts. */ var sqlConnection = function sqlConnection(sql, values, next) { // It means that the values hasnt been passed if (arguments.length === 2) { next = values; values = null; } var connection = mysql.createConnection(config.db); connection.connect(function(err) { if (err !== null) { console.log("[MYSQL] Error connecting to mysql:" + err+''/n''); } }); connection.query(sql, values, function(err) { connection.end(); // close the connection if (err) { throw err; } // Execute the callback next.apply(this, arguments); }); } module.exports = sqlConnection;

De lo que puedes usar en cualquier lugar simplemente haciendo como

var mysql_query = require(''path/to/your/mysql_query''); mysql_query(''SELECT * from your_table where ?'', {id: ''1''}, function(err, rows) { console.log(rows); });

ACTUALIZADO: config.json parece

{ "db": { "user" : "USERNAME", "password" : "PASSWORD", "database" : "DATABASE_NAME", "socketPath": "/tmp/mysql.sock" } }

Espero que esto ayude.


prueba esto

var express = require(''express''); var mysql = require(''mysql''); var path = require(''path''); var favicon = require(''serve-favicon''); var logger = require(''morgan''); var cookieParser = require(''cookie-parser''); var bodyParser = require(''body-parser''); var routes = require(''./routes/index''); var users = require(''./routes/users''); var app = express(); // view engine setup app.set(''views'', path.join(__dirname, ''views'')); app.set(''view engine'', ''jade''); // uncomment after placing your favicon in /public //app.use(favicon(path.join(__dirname, ''public'', ''favicon.ico''))); app.use(logger(''dev'')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, ''public''))); app.use(''/'', routes); app.use(''/users'', users); // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error(''Not Found''); err.status = 404; next(err); }); // error handlers // development error handler // will print stacktrace console.log(app); if (app.get(''env'') === ''development'') { app.use(function(err, req, res, next) { res.status(err.status || 500); res.render(''error'', { message: err.message, error: err }); }); } // production error handler // no stacktraces leaked to user app.use(function(err, req, res, next) { res.status(err.status || 500); res.render(''error'', { message: err.message, error: {} }); }); var con = mysql.createConnection({ host: "localhost", user: "root", password: "admin123", database: "sitepoint" }); con.connect(function(err){ if(err){ console.log(''Error connecting to Db''); return; } console.log(''Connection established''); }); module.exports = app;


var mysql = require(''mysql''); var pool = mysql.createPool({ host : ''yourip'', port : ''yourport'', user : ''dbusername'', password : ''dbpwd'', database : ''database schema name'', dateStrings: true, multipleStatements: true }); // TODO - if any pool issues need to try this link for connection management // https://.com/questions/18496540/node-js-mysql-connection-pooling module.exports = function(qry, qrytype, msg, callback) { if(qrytype != ''S'') { console.log(qry); } pool.getConnection(function(err, connection) { if(err) { if(connection) connection.release(); throw err; } // Use the connection connection.query(qry, function (err, results, fields) { connection.release(); if(err) { callback(''E#connection.query-Error occurred.#''+ err.sqlMessage); return; } if(qrytype===''S'') { //for Select statement // setTimeout(function() { callback(results); // }, 500); } else if(qrytype===''N''){ let resarr = results[results.length-1]; let newid= ''''; if(resarr.length) newid = resarr[0][''@eid'']; callback(msg + newid); } else if(qrytype===''U''){ //let ret = ''I#'' + entity + '' updated#Updated rows count: '' + results[1].changedRows; callback(msg); } else if(qrytype===''D''){ //let resarr = results[1].affectedRows; callback(msg); } }); connection.on(''error'', function (err) { connection.release(); callback(''E#connection.on-Error occurred.#''+ err.sqlMessage); return; }); });

}