Параметры формы не передаются приложению express при использовании http-proxy-middleware - PullRequest
0 голосов
/ 21 февраля 2020

Это очень конкретная c проблема, и, вероятно, ее трудно описать / понять. Я не знаю, сколько нужно ввода, поэтому сначала я опишу всю свою архитектуру: сейчас я программирую свою первую микросервисную архитектуру, использую nodejs, фреймворк express, рули для пользовательского интерфейса и http-proxy-middleware для создания сеть.

Каждая служба запускается с произвольного порта. Затем сервисы регистрируются на API-шлюзе. Шлюз api-gateway направляет URL-адреса, такие как «/ api / web / [service] / [rest]», на «localhost: [serviceport] / [rest]» (это означает, что шлюз webapi направляет запрос / [rest] к службе на зарегистрированном сервисном порту ". Чтобы запустить весь интерфейс на обычном порту 80, я создал прокси-сервер, который перенаправляет все запросы, начиная с" / api ", на предыдущий определенный шлюз. Для обоих этих перенаправлений я использую http- proxy-middleware:

this.app.use(rewritePath,
            this.proxy({
                target: "http://localhost:" + port,
                changeOrigin: true,
                pathRewrite: (path, req) => {
                    console.log(path);
                    var split = path.split("/");
                    split = split.splice(2, split.length);
                    split = split.join("/");
                    if (!split.startsWith("/")) {
                        split = "/" + split;
                    }
                    console.log(path + " to -> localhost:" + port + split);

                    return split;
                }
            })
        );  

Мне не нужны комментарии к этому коду, просто для лучшего понимания. В целом: он работает.

Я использую REST-клиент Insomnia, чтобы протестировать системы. У меня есть служба аутентификации, которая используется для аутентификации пользователя. Я могу передать запрос post "localhost / api / web / auth / login" с параметрами тела

{
    "username":"user",
    "password":"test"
}

и я я получаю 200 Response, что он работает.

Теперь к моей проблеме: я создал интерфейс, показывающий форму:

<form action="/api/web/auth/login" method="post">
   <input name="username" type="text" placeholder="Username" required>
   <input name="password" type="password" placeholder="Password" required>
   <input type="submit" value="Log in">
</form>

Когда я отправляю форму, служба аутентификации получает запрос , но тело запроса пусто. y Тело запроса пусто при использовании веб-сайта, в то время как оно работает, когда я использую REST-клиент?

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

РЕШЕНИЕ:

В остальном клиенте я использовал json закодированные данные, в то время как форма отправляла данные в кодированном виде. Я добавил в приложение промежуточное ПО

this.app.use(bodyParser.urlencoded({ extended: true }));

. После этого я обнаружил, что http-proxy-middleware и bodyParser не работают вместе, как указано здесь: https://github.com/chimurai/http-proxy-middleware/issues/320.

Я решил проблему с помощью coexist-parser-proxy ( https://github.com/stuartZhang/coexist-parser-proxy (также предлагается здесь: https://github.com/chimurai/http-proxy-middleware/issues/320#issuecomment -570889127 ))

0 голосов
/ 21 февраля 2020

Я вижу, что параметры передаются из внешнего интерфейса.

...