2016-12-05 45 views
1

我学习使用作出反应的那一刻,我有一个问题:我想用的反应我的Java春季启动后端(Tomcat)的工作。 React在端口3000(默认)上运行,我的Tomcat服务器在端口8080上运行(默认)。现在,当我做一个REST调用,我收到以下错误我不能让其他要求与反应

script.js:13 GET http://localhost:8080/api/path?p=test net::ERR_CONNECTION_REFUSED 

我的REST调用看起来像:

fetch('http://localhost:8080/api/path?p=test') 
     .then(res => { 
      console.log(res); 
     }); 

我该怎么做了?我真的没有想法。

+2

你尝试发送请求与邮差或可能发布应用程序?其他情况下,您的后端是否接受跨源请求? – Tugrul

+0

在浏览器中尝试http:// localhost:8080/api/path?p = test。它工作吗? – 2016-12-05 07:58:58

+1

拒绝连接意味着它说的是什么,出于某种原因它不能与后端进行通信。检查您的路径是否正确,如果您的后端正在运行,...。我们目前无法解决这个问题。 – g00glen00b

回答

6

当你的前端(阵营应用程序)无法连接到后端(Spring的启动应用程序)的net::ERR_CONNECTION_REFUSED错误通常是抛出。有许多可能的原因要做到这一点,如:

  • 你的后端应用程序不运行
  • 路径到后端应用程序是不正确的
  • 有某种防火墙即停止交通
  • 您的前端和后端应用程序...

在你的情况之间它似乎是不正常运行后端应用程序。

你的第二个问题涉及CORS,这是防止从JavaScript的连接到其他API /网站不在相同的(子)域和端口的机制。在你的情况下,你的前端运行在不同于你后端的端口上,这意味着你必须处理CORS。

要处理CORS,你要一个头添加到您的后端(即Access-Contol-Allow-Origin头中的错误提)。借助于Spring,你可以通过添加以下标注到控制器:

@CrossOrigin(origins = "http://localhost:3000") 

也可以配置CORS全球有一个过滤器或使用WebMvcConfigurer

@Bean 
public WebMvcConfigurer corsConfigurer() { 
    return new WebMvcConfigurerAdapter() { 
     @Override 
     public void addCorsMappings(CorsRegistry registry) { 
      registry.addMapping("/api/**").allowedOrigins("http://localhost:3000"); 
     } 
    }; 
} 

正如@在评论中提到Lutz Horn,这也在Spring guide中描述。