我试图找出在我的express.js路由之间传递mysql连接(使用node-mysql)的最佳方法.我正在动态添加每个路由(在路由中使用for each文件循环),这意味着我不能只将连接传递给需要它的路由.我要么将它传递给每条路线,要么根本不传递.我不喜欢将它传递给那些不需要它的想法所以我创建了一个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; };
我使用以下方法将其导入每条路线:
var db = require('../dbConnection.js'); var connection = new db();
但我想这样做:
var connection = require('../dbConnection.js');
然而,当我这样尝试时,我得到一个错误,当我尝试进行查询时,连接没有方法'查询'.
我觉得使用node-mysql的池对象更可靠.这是我如何设置我的.我使用环境变量来获取数据库信息.保持它不受回购.
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); }); };