【问题标题】:AWS NodeJS Lambda : pass event data object as parameter to a require moduleAWS NodeJS Lambda:将事件数据对象作为参数传递给需要模块
【发布时间】:2020-07-22 08:03:39
【问题描述】:

我有一个包含三个文件的 NodeJS 12 lambda 函数: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);
};

helpers.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 值是 AWS API Gateway 返回的暂存值。它让我知道这是开发 API 网关调用还是生产 API 网关调用。两个可能的值:devprod

目标:

根据返回值,我想将它传递给 dbconfig 模块以设置不同的数据库设置。环境返回 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 在 helpers.js 中是未定义的:

const userIdData = await db.any('SELECT * FROM users WHERE id = $1', [id]);

我有点卡住了。如何在不重构所有内容的情况下传递 const env?

【问题讨论】:

    标签: node.js aws-lambda


    【解决方案1】:

    好的,这很明显(开个玩笑,我在这上面花了太多时间)

    在 index.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') ...
    

    一切都是……我不知道我们可以从索引文件中导出。

    现在我做:=)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-30
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      相关资源
      最近更新 更多