Comment passer correctement la connexion mysql aux routes avec express.js

J’essaie de trouver le meilleur moyen de passer une connexion mysql (en utilisant node-mysql) entre mes routes pour express.js. J’ajoute de manière dynamic chaque route (en utilisant une boucle pour chaque fichier dans des routes), ce qui signifie que je ne peux pas simplement transmettre la connexion aux routes qui en ont besoin. J’ai besoin de le transmettre à chaque itinéraire ou pas du tout. Je n’aimais pas l’idée de le transmettre à ceux qui n’en avaient pas besoin, alors j’ai créé un fichier dbConnection.js que les itinéraires peuvent importer individuellement s’ils en ont besoin. Le problème est que je ne pense pas que je le fais correctement. A partir de maintenant, mon fichier dbConnection.js contient:

var mysql = require('mysql'); var db = null; module.exports = function () { if(!db) { db = mysql.createConnection({ socketPath: '/tmp/mysql.sock', user: '*********', password: '*********', database: '**********' }); } return db; }; 

Et je l’importe dans chaque route en utilisant:

 var db = require('../dbConnection.js'); var connection = new db(); 

Mais je voudrais le faire comme ceci:

 var connection = require('../dbConnection.js'); 

Cependant, lorsque j’essaie comme ceci, j’obtiens une erreur en disant que la connexion n’a pas de méthode ‘requête’ lorsque j’essaie de faire une requête.

Je trouve plus fiable d’utiliser l’object pool de node-mysql. Voici comment j’ai mis le mien en place. J’utilise la variable d’environnement pour les informations de firebase database. Garde le hors du repo.

firebase 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); }); }); }; 

Route

 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); }); }; 

votre solution fonctionnera si vous utilisez db () au lieu de new db (), qui renvoie un object et non la connexion à la firebase database

 var db = require('../dbConnection.js'); //var connection = new db(); var connection = db();