【发布时间】: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 网关调用。两个可能的值:dev 或 prod
目标:
根据返回值,我想将它传递给 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