这是一个非常具体的问题,可能很难描述/理解。我不知道你需要多少输入,所以我将首先描述我的整个架构:我目前正在编写我的第一个微服务架构,我使用 nodejs、express 框架、ui 的把手和 http-proxy-middleware 来创建网络。
每个服务都从一个随机端口开始。然后服务在 api-gateway 注册。api-gateway 将“/api/web/[service]/[rest]”之类的 url 路由到“localhost:[serviceport]/[rest]”(这意味着 webapi-gateway 将 /[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;
}
})
);
我不需要对该代码的评论,只是为了更好地理解。总而言之:它有效。
我正在使用 Insomnia REST 客户端来测试系统。我有一个身份验证服务,用于对用户进行身份验证。我可以通过正文参数传递发布请求“localhost/api/web/auth/login”
{
"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>
当我发布表单时,身份验证服务收到请求,但请求正文为空。为什么使用网站时请求正文为空,而我使用 REST 客户端时它可以工作?