如何在发送之前动态更改proxy.conf.js中的请求

时间:2019-04-14 19:06:15

标签: angular angular-cli angular-cli-v7

我有一个Angular7应用程序,并希望通过Angular CLI代理将HTTP请求发送到API。然后,API使用JSON对象进行响应。我对代理的配置是在proxy.conf.js中完成的。

具有简单目标的简单请求可以正常工作。但是我想在发送请求之前动态更改请求。我在https://github.com/angular/angular-cli/blob/master/docs/documentation/stories/proxy.md#bypass-the-proxy找到了一条指令,但是我无法使其动态更改目标url。

我的目标:
我想向天气API发送请求。我发送给该API的网址必须包含城市的纬度和经度。该城市将由用户选择。该用户输入应更改请求目标。

我发送的请求
http://localhost:4200/forecast?lat=51.33962&lon=12.37129

这是我的proxy.conf.js:

const PROXY_CONFIG = [
    {
        context: [
            "/forecast",
        ],
        target: "https://api.anyName.net/forecast/anyKey/37.8267,-122.4233",
        changeOrigin: true,
        secure: false,
        pathRewrite: {
            "^/forecast": ""
        },
        bypass: function(req, res, proxyOptions) {
            if (req.query.lat) {
                let LATITUDE = req.query.lat;
                let LONGITUDE = req.query.lon;
                const newTarget = "https://api.anyName.net/forecast/anyKey/"+LATITUDE+","+LONGITUDE;               
                req.target = newTarget;
                return newTarget;
            } 
        },
    }
];

module.exports = PROXY_CONFIG;

我不太确定如何使用旁路功能。我该怎么做才能改变目标?

1 个答案:

答案 0 :(得分:0)

我设法达到了我想要的。我确实错过了我在pathRewrite: {"^/forecast": ""},行中所做的实际上是一个RegEx,可以处理将要发送的请求。所以我做了以下事情:

const PROXY_CONFIG = [
    {
        context: [
            "/forecast",
        ],
        target: "https://api.anyName.net/forecast/anyKey/",
        changeOrigin: true,
        secure: false,
        pathRewrite: function(path) {
            const parameter = path.split("?")[1];
            const latitude  = parameter.split("&")[0].split("=")[1];
            const longitude = parameter.split("&")[1].split("=")[1];

            return path.replace(path, `${latitude},${longitude}`);
        },
    }
];

module.exports = PROXY_CONFIG;

我确实在https://github.com/chimurai/http-proxy-middleware#options处找到了有用的文档,并在Angular-CLI proxy to backend doesn't work处得到了提示