如何正确地传递mysql连接到express.js路由

我试图找出传递一个mysql连接(使用node-mysql)在express.js的路由之间的最佳方式。 我dynamic地添加每个路由(使用路由中的每个文件循环),这意味着我不能只传递连接到需要它的路由。 我要么把它传递给每一条路线,要么根本没有。 我不喜欢把它传递给不需要它的想法,所以我创build了一个dbConnection.js,路由可以单独导入,如果他们需要。 问题是,我不认为我做得正确。 截至目前,我的dbConnection.js包含:

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

我正在使用以下命令将其导入每条path:

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

但我想这样做:

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

但是,当我尝试这样做的时候,当我尝试查询时,出现连接没有方法“查询”的错误。

我发现使用node-mysql的池对象更可靠。 这是我如何设置我的。 我使用环境variables来获取数据库信息。 保持它回购。

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

路线

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

你的解决scheme将工作,如果使用db()而不是新的db(),它返回一个对象,而不是数据库连接

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