Matchu
df2d814c13
had to add some missing tables, but it seems to work! (some known errors though, from assumptions we make e.g. blue acaras existing)
54 lines
1.4 KiB
JavaScript
54 lines
1.4 KiB
JavaScript
const mysql = require("mysql2");
|
|
|
|
let globalDbs = new Map();
|
|
|
|
// We usually run against the production database, even in local testing,
|
|
// to easily test against real data. (Not a wise general practice, but fine
|
|
// for this low-stakes project and small dev team with mostly read-only
|
|
// operations!)
|
|
//
|
|
// But you can also specify `DB_ENV=development` to use a local database,
|
|
// which is especially helpful for end-to-end modeling testing.
|
|
const defaultOptions =
|
|
process.env["DB_ENV"] === "development"
|
|
? {
|
|
host: "localhost",
|
|
user: "impress_2020_dev",
|
|
password: "impress_2020_dev",
|
|
database: "impress_2020_dev",
|
|
}
|
|
: {
|
|
host: "impress.openneo.net",
|
|
user: process.env["IMPRESS_MYSQL_USER"],
|
|
password: process.env["IMPRESS_MYSQL_PASSWORD"],
|
|
database: "openneo_impress",
|
|
};
|
|
|
|
async function connectToDb({
|
|
host = defaultOptions.host,
|
|
user = defaultOptions.user,
|
|
password = defaultOptions.password,
|
|
database = defaultOptions.database,
|
|
} = {}) {
|
|
if (globalDbs.has(host)) {
|
|
return globalDbs.get(host);
|
|
}
|
|
|
|
const db = mysql
|
|
.createConnection({
|
|
host,
|
|
user,
|
|
password,
|
|
database,
|
|
multipleStatements: true,
|
|
})
|
|
// We upgrade to promises here, instead of using the mysql2/promise import,
|
|
// for compatibility with Honeycomb's automatic tracing.
|
|
.promise();
|
|
|
|
globalDbs.set(host, db);
|
|
|
|
return db;
|
|
}
|
|
|
|
module.exports = connectToDb;
|