передать аргумент в строку подключения mysql - PullRequest
0 голосов
/ 01 ноября 2019

Ниже приведен мой код (в файле db.js)

function connection() {
  try {
    const mysql = require('mysql2');

    const pool = mysql.createPool({
      host: "mydb.abcd1234.ap-southeast-1.rds.amazonaws.com",
      database: "mydatabase",
      user: "user",
      password: "password", 
      connectionLimit: 11,
      waitForConnections: true,
      queueLimit: 0,
      namedPlaceholders: true
    });

    const promisePool = pool.promise();

    return promisePool;
  } catch (error) {
    return console.log(`Could not connect - ${error}`);
  }
}

const pool = connection();

module.exports = {
  connection: async () => pool.getConnection(),
  execute: (...params) => pool.execute(...params)
};

И чтобы использовать его, я просто добавляю var db = require('./../db.js'); вверху файлов, которые его требуют. Кроме того, ниже показано, как я буду выполнять любые SQL-операторы

const myResult = await db.execute("Select COUNT(*) AS dataCount from teachers WHERE username = ?", [username]);

Но теперь мне нужно разделить базу данных по странам. Таким образом, моя база данных будет иметь имя mydatabase_ + код страны, например mydatabase_my, mydatabase_jp, mydatabase_uk и т. Д. И т. Д. Так как мне передать код страны в function connection()?

Я попробовал что-то вроде

function connection(country) {
  try {
    const mysql = require('mysql2');

    const pool = mysql.createPool({
      host: "mydb.abcd1234.ap-southeast-1.rds.amazonaws.com",
      database: "mydatabase_" + country,
      user: "user",
      password: "password", 
      connectionLimit: 11,
      waitForConnections: true,
      queueLimit: 0,
      namedPlaceholders: true
    });

    const promisePool = pool.promise();

    return promisePool;
  } catch (error) {
    return console.log(`Could not connect - ${error}`);
  }
}

const pool = connection(country);

module.exports = {
  connection: async (country) => pool.getConnection(country),
  execute: (...params) => pool.execute(...params)
};

, и на странице вызова я сделал

var db = require('./../db.js');
db.connection("my")

, но для вышеизложенного я получу ReferenceError: country is not defined, что относится кстрана на линии const pool = connection(country);

1 Ответ

0 голосов
/ 01 ноября 2019

Вот как я это сделал:

const mysql = require('mysql2');

const pool = function(country){
  var mydb = mysql.createPool({
    host: "mydb.abcd1234.ap-southeast-1.rds.amazonaws.com",
      database: "mydatabase_" + country,
      user: "user",
      password: "password", 
      connectionLimit: 11,
      waitForConnections: true,
      queueLimit: 0,
      namedPlaceholders: true
  });
  return mydb;
}

const promisePool = function(country){
  return pool(country).promise();
}

module.exports = {
  connection: async (country) => promisePool(country).getConnection(),
  execute: (country,...params) => promisePool(country).execute(...params)
};

И на странице, которая использует mysql, будет что-то вроде этого:

db.connection(country)
const myResult = await db.execute(country, "Select * from schools");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...