У меня есть лямбда-функция NodeJS 12 с тремя файлами: index. js, helpers. js, dbconfig. js
index. js
exports.handler = async function (event, context, callback) {
context.callbackWaitsForEmptyEventLoop = false;
const env = event.env;
const id = event.userid;
const helpers = require('./helpers');
var userData = await helpers.getUserById(id);
callback(null, userData);
};
помощники. js
const db = require('./dbconfig');
module.exports = {
getUserById: async function (id) {
const userIdData = await db.any('SELECT * FROM users WHERE id = $1', [id]);
return userIdData;
},
и, наконец, dbconfig. js
const pgp = require('pg-promise')();
const cn = {
user: 'dbuser',
host: 'some-rds-instance.aws',
database: 'db',
password: 'pass',
port: 5432,
};
const db = pgp(cn);
module.exports = db;
Примечание: я немного упростил / уменьшил код для целей вопроса
Значение env - это промежуточное значение, возвращаемое шлюзом API AWS. Это позволяет мне узнать, является ли это вызовом шлюза API разработки или производственным. Два возможных значения: dev или prod
Цель:
В зависимости от возвращаемого значения, я хотел бы передать его в модуль dbconfig в Для того, чтобы установить различные настройки базы данных. Производственные параметры, когда env возвращает prod , и параметры разработки, когда значение установлено на dev . Довольно просто
Как это сделать?
Во-первых, я хотел бы установить переменную db, для которой потребуется конфигурация db с такими параметрами, как:
index. js [ ...]
const env = event.env;
const db = require('./dbconfig')(env);
[...]
dbconfig. js [...]
module.export = function (env){
if(env == 'prod)
....
return db;
[...]
Но тогда в помощниках теперь не определено db. js:
const userIdData = await db.any('SELECT * FROM users WHERE id = $1', [id]);
Я немного застрял. Как я могу передать const env без рефакторинга всего?