我试图找出在我的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');
然而,当我这样尝试时,我收到一个错误,说当我尝试进行查询时连接没有方法'查询'。
答案 0 :(得分:50)
我发现使用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);
});
};
答案 1 :(得分:1)
如果使用db()而不是新的db(),它将返回一个对象而不是数据库连接
var db = require('../dbConnection.js');
//var connection = new db();
var connection = db();