AWS Secrets manager 和 setupProxy.js http-proxy-middleware

问题描述

在连接我的代理之前,我需要从机密管理器中提取配置

const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const { SecretsManagerClient,GetSecretValueCommand } = require('@aws-sdk/client-secrets-manager');
const pjson = require('../app/config');
const app = express();
async function getSecretsManager(){
    return secrets; // (this functions correctly,redacting for security)
}

const buildProxies = async (app) => {
    const proxies = pjson['nonprod-proxies'];
    const secrets = await getSecretsManager();
    let proxiesToMap = [];
    proxies.forEach(proxy => {
        console.log(`[PROXY SERVER] Creating proxy for: ${proxy['proxy-path']}`);
        let target,headers,options;
        const rewrite = `^${proxy['proxy-path']}`;
        if (proxy['internal'])
        {
            target = `https://${secrets['apiDomain']}`;
            headers = {'x-api-key': secrets['apiKey']};
            options = {
                target: target,changeOrigin: true,logLevel: 'debug',headers
            }
        } else {
            target = proxy['proxy-domain'];
            options = {
                target: `https://${target}`,pathRewrite: {
                    [rewrite]: ''
                }
            }
        }
        proxiesToMap.push({'path': proxy['proxy-path'],'options': options})
    });
    return proxiesToMap;
};

module.exports = function(app){
    buildProxies().then(proxies => {
        proxies.forEach(proxyVal => {
            console.log(`Proxy: ${proxyVal['path']} with options ${proxyVal['options']}`);
            app.use(proxyVal['path'],createProxyMiddleware(proxyVal['options']))
        });
    });
    console.log('=== SUCCESSFULY CREATED PROXY SERVER ===');
};

这会导致 localhost:3000 返回样板 html cors 响应,但是,当将 module.exports 的代码替换为:

app.use('/internal/*',createProxyMiddleware({
    target: '<my aws secret url>',headers: { 'x-api-key': '<my aws secret api key>' }
}));

代理工作。有没有办法在 setupProxy.js 内异步加载配置?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)