AWS NodeJS Лямбда: передача объекта данных события в качестве параметра в требуемый модуль - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть лямбда-функция 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 без рефакторинга всего?

1 Ответ

0 голосов
/ 10 апреля 2020

Хорошо, это было совершенно очевидно (шучу, я потратил слишком много времени на это)

В индексе. js, мы можем экспортировать переменную

exports.handler = async function (event, context, callback) {
    context.callbackWaitsForEmptyEventLoop = false;

    var env = event.env;
    module.exports = env;

, затем в dbconfig. js

const env = require('./index');
const pgp = require('pg-promise')();

if (env == 'dev') ...

Все было ... я не знал, что мы можем экспортировать из файла индекса.

И теперь я делаю: =)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...