Как динамически изменить запрос в proxy.conf.js перед его отправкой - PullRequest
0 голосов
/ 14 апреля 2019

У меня есть приложение Angular7 и я хочу отправить HTTP-запрос к API через прокси-сервер Angular CLI.Затем API отвечает объектом JSON.Мои настройки для прокси выполняются в proxy.conf.js.

Простой запрос с простой целью работает нормально.Но я хочу динамически изменить запрос до его отправки.Я нашел инструкцию на https://github.com/angular/angular-cli/blob/master/docs/documentation/stories/proxy.md#bypass-the-proxy, но я просто не могу заставить ее динамически изменять целевой URL.

Моя цель:
Я хочу отправить запрос в API погоды.URL, который я посылаю этому API, должен содержать широту и долготу города.Город будет выбран пользователем.Этот пользовательский ввод должен изменить цель запроса.

Отправляемый мной запрос:
http://localhost:4200/forecast?lat=51.33962&lon=12.37129

Это мой прокси.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 голосов
/ 16 апреля 2019

Ну, мне удалось достичь того, что я хотел. Я упустил то, что я делаю в этой строке 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-прокси для бэкэнда не работает

...