例如:我有Angular登录,注册,注销组件。我也有用于登录,注册和注销的Spring Boot Rest控制器。 Angular如何知道地图-
Login Component ==> Login Controller
Register Component ==> Register Controller
Logout Component ==> Logout Controller
我正在使用Spring Boot 2.1.2和Angular 7。
我研究发现,HTTPClientModule
负责联系REST API,其中涉及FormsModule
,HttpModule
。
我还发现添加以下代码:
{
"/api": {
"target": "http://localhost:8080",
"secure": false
}
}
到proxy.conf.json
将集成Angular和Spring Boot,但这不是我想要的。
我正在寻找对Angular中的REST API的函数调用。
谢谢。
答案 0 :(得分:2)
Angular从不将URL映射到spring控制器。实际上,在浏览器中运行的Angular应用对服务器上某处部署的服务一无所知。
HttpClientModule
对服务器端一无所知。它不知道您是否向api/login
网址发出请求,它应该转到LoginController
或其他地方。
通过添加问题,如proxy.conf.json
内的问题所示,您所要做的就是设置重定向呼叫的配置,以避免任何CORS
问题。
因此HTTPClientModule
进行api调用,Angular应用程序将查找是否设置了代理,如果未对代理目标进行调用,则对提供的URL进行调用。
现在,部署在proxy target
上的服务变得生动起来了:
调用api调用时,它将首先到达服务库URL:/api/
,这是您的应用程序中定义的路径:spring.data.rest.basePath=/api
。
Spring Boot默认情况下使用Apache Tomcat,因此,发送到Tomcat Web服务器的每个HTTP请求均由Java Servlet处理。
Spring DispatcherServlet
提供以下功能:
DispatcherServlet :HTTP请求处理程序/控制器的中央调度程序,例如用于Web UI控制器或基于HTTP的远程服务导出器。向注册的处理程序调度,以处理Web请求,提供便利的映射和异常处理功能。
这是Spring Web MVC框架的核心;该核心组件接收对您的应用程序的所有请求。为了找到与请求匹配的处理程序,Spring会通过HandlerMapping
接口的已注册实现
答案 1 :(得分:0)
如果您需要选择性地绕过代理,或者在发送请求之前动态更改请求,请在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"
},