Angular 如何知道要调用哪个 Spring Boot REST API?



例如:我有Angular Login,Register,Logout Components。我还有用于登录、注册和注销的 Spring 引导休息控制器。角度怎么知道映射 -

Login Component ==> Login Controller
Register Component ==> Register Controller
Logout Component ==> Logout Controller

我正在使用Spring Boot 2.1.2和Angular 7。

我研究并发现HTTPClientModule负责联系REST API和FormsModuleHttpModule参与其中。

我还发现添加此代码:

{
"/api": {
"target": "http://localhost:8080",
"secure": false
}
}

proxy.conf.json将集成 Angular 和 Spring Boot,但这不是我想要的。

我正在寻找对 Angular 中 REST API 的函数调用。

提前谢谢。

Angular 从不将 url 映射到 spring 控制器。事实上,在浏览器中运行的 Angular 应用程序对部署在服务器上某处的服务一无所知。

HttpClientModule对服务器端的东西一无所知。它不知道您是否请求api/login网址,它应该转到LoginController或其他内容。

通过添加条目,如proxy.conf.json内的问题所示,您所做的只是设置用于重定向呼叫的配置,以避免任何CORS问题。

因此,HTTPClientModule进行 api 调用,角度应用程序会查看是否设置了代理,如果是,则调用代理目标,如果没有,则调用提供的 url。

现在,proxy target部署的服务出现了: 调用 api 调用时,它首先到达服务基 url:/api/这是应用程序中定义的路径:spring.data.rest.basePath=/api

Spring Boot 默认使用 Apache Tomcat,因此发送到 Tomcat Web 服务器的每个 HTTP 请求都由 Java servlet 处理。

SpringDispatcherServlet提供以下功能:

  • 将 HTTP 请求映射到特定处理方法
  • 将 HTTP 请求数据和标头解析为数据传输对象 (DTO) 或域对象
  • 模型-视图-控制器交互
  • 从 DTO、域对象等生成响应。

DispatcherServlet:HTTP 请求处理程序/控制器的中央调度程序,例如用于 Web UI 控制器或基于 HTTP 的远程服务导出器。向注册处理程序发送用于处理 Web 请求,提供方便的映射和异常处理工具。

它是Spring Web MVC框架的核心;这个核心组件接收对应用程序的所有请求。为了找到与请求匹配的处理程序,Spring 会遍历HandlerMapping接口的注册实现。

如果您需要选择绕过代理,或者在发送请求之前动态更改请求,请在 proxy.conf 中定义配置.js例如

const PROXY_CONFIG = {
"/api/proxy": {
"target": "http://localhost:3000",
"secure": false,
"bypass": function (req, res, proxyOptions) {
if (req.headers.accept.indexOf("html") !== -1) {
console.log("Skipping proxy for browser request.");
return "/index.html";
}
req.headers["X-Custom-Header"] = "yes";
}
}
}
module.exports = PROXY_CONFIG;

在你的angular.json中,你需要把你的'proxy.config.js指向那里,

"architect": {
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "your-application-name:build",
"proxyConfig": "proxy.conf.js"
},

详细信息在这里

相关内容

最新更新