Как правильно передать соединение mysql с маршрутами с помощью express.js
Я пытаюсь найти лучший способ передать соединение mysql (используя node -mysql) между моими маршрутами для express.js. Я динамически добавляю каждый маршрут (используя для каждого цикла файлов в маршрутах), что означает, что я не могу просто передать соединение с теми маршрутами, которые в нем нуждаются. Мне либо нужно передать его каждому маршруту, либо никому. Мне не понравилась идея передать его тем, кому это не нужно, поэтому я создал 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');
Однако, когда я пытаюсь сделать это, я получаю сообщение о том, что соединение не имеет запроса метода, когда я пытаюсь сделать запрос.
Ответы
Ответ 1
Я считаю более надежным использование объекта пула node -mysql. Вот как я подставил. Я использую переменную среды для информации базы данных. Сохраняет его из репо.
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);
});
};
Ответ 2
ваше решение будет работать, если использовать db() вместо нового db(), который возвращает объект, а не соединение db
var db = require('../dbConnection.js');
//var connection = new db();
var connection = db();