Html 使用http代理中间件时,表单参数不会传递给express应用程序

Html 使用http代理中间件时,表单参数不会传递给express应用程序,html,node.js,express,http-proxy-middleware,Html,Node.js,Express,Http Proxy Middleware,这是一个非常具体的问题,可能很难描述/理解。 我不知道您需要多少输入,因此我将首先描述我的整个体系结构: 我目前正在编程我的第一个微服务架构,我使用nodejs、express框架、ui手柄和http代理中间件来创建网络 每个服务从一个随机端口开始。服务然后在api网关上注册。api网关将“/api/web/[service]/[rest]”等URL路由到“localhost:[serviceport]/[rest]”(这意味着webapi网关将/[rest]请求路由到注册服务端口上的服务)。

这是一个非常具体的问题,可能很难描述/理解。 我不知道您需要多少输入,因此我将首先描述我的整个体系结构: 我目前正在编程我的第一个微服务架构,我使用nodejs、express框架、ui手柄和http代理中间件来创建网络

每个服务从一个随机端口开始。服务然后在api网关上注册。api网关将“/api/web/[service]/[rest]”等URL路由到“localhost:[serviceport]/[rest]”(这意味着webapi网关将/[rest]请求路由到注册服务端口上的服务)。 为了在普通端口80上运行整个前端,我创建了一个代理,它将以“/api”开头的所有请求路由到以前定义的网关。对于这两个重定向,我使用http代理中间件:

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客户端来测试系统。 我有一个身份验证服务,用于对用户进行身份验证

{
    "username":"user",
    "password":"test"
}
我得到了200条回复,证明它有效

现在我的问题是: 我创建了一个显示表单的前端:

<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>

当我发布表单时,auth服务接收到请求,但请求正文为空。 为什么在使用网站时请求正文是空的,而在我使用REST客户端时请求正文是有效的?

我看到参数正在从前端传递。

解决方案:

在rest客户机中,我使用json编码的数据,而表单提交了formdata编码的数据

this.app.use(bodyParser.urlencoded({ extended: true }));
应用程序的中间件。在此之后,我发现http代理中间件和bodyParser不能很好地协同工作,如下所述:

我使用共存解析器代理解决了这个问题((这里也提出了:)