我想在虚拟MacOS上测试我的angular应用程序,但问题是我使用10.0.2.2 IP连接到资源。我应该在我的springboot应用程序中做些什么才能从localhost和www.example.com访问和10.0.2.2?
6ie5vjzr1#
您有两种选择:
您需要创建一个文件proxy.conf.json并在您的angular.json文件中引用它:
proxy.conf.json
angular.json
"serve": { "builder": "@angular-devkit/build-angular:dev-server", "options": { ... --> "proxyConfig": "proxy.conf.json" <-- }, ... }
在你的proxy.conf.json中,你定义了你想代理到哪个主机的路径,假设你的API请求都以/api为前缀,并且你的Spring后端运行在1234端口上,你需要如下配置:
/api
1234
{ "/api/*": { "target": "http://localhost:1234", "secure": false } }
然后你需要确保你在开发模式下的请求仅仅是相对的,不包括主机名。你可以通过在你的environment.ts中有一个名为BACKEND_URL的键来实现这一点,在开发中它是一个空字符串,而在environment.prod.ts中它是实际的URL。然后你需要在你的服务中使用这个键来调用你的后端。更多信息可以在官方Angular文档中找到。
environment.ts
BACKEND_URL
environment.prod.ts
@CrossOrigin
您可以直接指定哪些主机应该被允许访问您的端点。由于您只需要出于测试/开发目的来实现这一点,我建议您坚持使用第一种方法,这样您的生产代码中就不会有与开发相关的代码。a Spring guide的示例适用于您的IP地址:
@RestController public class GreetingController { private static final String template = "Hello, %s!"; private final AtomicLong counter = new AtomicLong(); @CrossOrigin(origins = "10.0.2.2") @GetMapping("/greeting") public Greeting greeting(@RequestParam(required = false, defaultValue = "World") String name) { System.out.println("==== get greeting ===="); return new Greeting(counter.incrementAndGet(), String.format(template, name)); } }
这里有一个关于这个主题的Baeldung article,当然还有official Spring reference。
1条答案
按热度按时间6ie5vjzr1#
您有两种选择:
1)让Angular dev服务器将后端请求代理到后端
您需要创建一个文件
proxy.conf.json
并在您的angular.json
文件中引用它:在你的
proxy.conf.json
中,你定义了你想代理到哪个主机的路径,假设你的API请求都以/api
为前缀,并且你的Spring后端运行在1234
端口上,你需要如下配置:然后你需要确保你在开发模式下的请求仅仅是相对的,不包括主机名。你可以通过在你的
environment.ts
中有一个名为BACKEND_URL
的键来实现这一点,在开发中它是一个空字符串,而在environment.prod.ts
中它是实际的URL。然后你需要在你的服务中使用这个键来调用你的后端。更多信息可以在官方Angular文档中找到。
2)在控制器/控制器端点上设置
@CrossOrigin
注解您可以直接指定哪些主机应该被允许访问您的端点。由于您只需要出于测试/开发目的来实现这一点,我建议您坚持使用第一种方法,这样您的生产代码中就不会有与开发相关的代码。
a Spring guide的示例适用于您的IP地址:
这里有一个关于这个主题的Baeldung article,当然还有official Spring reference。