在开发模式下,我使用Angular2 CLI的“ng serve”命令在localhost:4200上提供应用程序。这很好,因为对源文件的任何调整都会导致快速重建,浏览器会自动重新加载更改。
我的应用程序向运行在localhost:8080上的Jetty服务器上的RESTful api发出http请求。但所有的请求都失败了,非常无益:“EXCEPTION:响应状态:URL为null null”。如果相反我也通过将它指向客户端项目的dist目录来从Jetty服务器提供Angular应用程序,一切正常。通过查找有关类似问题的问题,我发现它可能是一个跨域请求(CORS)问题。
但是,如果我必须从与RESTful api相同的服务器/端口提供客户端应用程序,我将失去自动重建/重新加载的优势,这是我从“ng serve”获得的。 “ng build”速度较慢。
有什么方法吗?
更新
如答案所证实,这是一个CORS问题。我设法通过使用org.eclipse.jetty.servlets.CrossOriginFilter
过滤服务器端的请求来修复它。但是,我选择使用ng build -o dist -w
作为答案,因为这解决了我较慢的构建问题,在这种情况下,我很高兴只将我的Jetty服务器指向dist目录中的客户端文件并提供所有服务(客户端和api)来自同一个端口。
答案 0 :(得分:1)
是的,这是一个CORS问题。您的API需要在其响应中返回正确的Access-Control-Allow-Origin标头。
有关如何使用Spring Boot执行此操作的示例,请访问http://chariotsolutions.com/blog/post/angular-2-spring-boot-jwt-cors_part1
答案 1 :(得分:1)
这是与CORS相关的问题,但要回答您的问题,您可以使用-p标志使用不同的端口和ng服务:ng serve -p 8080
您还可以使用-w
标记来观看"观看"运行ng build
时文件会发生更改,这样会更新您在更改时指向的dist目录。