当前位置: 首页 > 知识库问答 >
问题:

使用React应用程序调用REST API时出错

韦高格
2023-03-14

我有一个运行在localhost:3000上的react应用程序,我尝试使用Java ee后端REST服务器调用REST API,运行在localhost:8080上。我已经在头球上启用了CORS。

我试着在我的组件上做一个表单提交post请求。

fetchApi = () => {

    const url = 'http://localhost:8080/test/api/rest/Service/checkCode';

    var myHeaders = new Headers();

    myHeaders.append('Access-Control-Allow-Origin', '*');
    myHeaders.append('Access-Control-Allow-Headers', 'origin, content-type, accept, authorization');
    myHeaders.append('Access-Control-Allow-Credentials', 'true');
    myHeaders.append('Access-Control-Allow-Methods', ' GET, POST, PUT, DELETE, OPTIONS, HEAD');
    myHeaders.append('Content-Type', 'application/json');

    var myInit = {
        method: 'POST',
        headers: myHeaders,
        mode: 'cors',
        cache: 'default',
        body: JSON.stringify({
            code: '15465',
            name: 'Jack',
        })
    };

    fetch(url, myInit)

        .then(function(response) {

            if (response.ok) {
                return response.json();
            }
            else{
                throw new Error('Network response was not ok');
            }


        }).then(function(data){

        console.log(data);
        this.setState({items: data});

    }).catch(function(error){
        console.log('There has been a problem with your fetch operation: ' + error.message);
    })
};

行中有错误:

 fetch(url, myInit):

选项http://localhost:8080/test/api/rest/service/checkcode 500(Erreur Interne de Servlet)

和CORS错误:

提取API无法加载http://localhost:8080/test/API/rest/service/checkcode。对preflight请求的响应未通过访问控制检查:请求的资源上没有“access-control-allow-origin”标头。因此,不允许访问源“ttp://localhost:3000”。响应的HTTP状态代码为500。如果一个不透明的响应满足您的需要,请将请求的模式设置为“no-cors”以获取禁用CORS的资源。

共有1个答案

斜昊空
2023-03-14

这是一个后端问题,而不是一个前端,你应该允许CORS从后端,这取决于后端使用的技术,我在我的后端使用了spring boot,所以通过添加这段代码到安全配置将解决它

@Bean
CorsConfigurationSource corsConfigurationSource() {
    CorsConfiguration configuration = new CorsConfiguration();
    configuration.setAllowedOrigins(Arrays.asList("https://example.com"));
    configuration.setAllowedMethods(Arrays.asList("GET","POST"));
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", configuration);
    return source;
}
 类似资料:
  • 我在使用“创建反应应用程序”时遇到编译失败。我得到的信息如下。 __ ./src/App。未找到js模块:您试图导入/联系项目src/目录之外的内容。不支持src/之外的相对导入。您可以将其移动到src/内部,也可以从项目的节点_modules/向其添加符号链接。 __ 奇怪的是,我的src文件夹中肯定有“/联系人”文件,而消息说我没有。这是我的文件夹树。 这是我的应用程序。js代码。 感觉我在这

  • 大家好,我第一次尝试启动我的react native项目,我已经安装了react native文档中提到的所有内容,以便在运行模拟器时使用android studio,并执行以下命令

  • 当我试图使用命令运行create-react-app时,我收到以下消息 然后,我尝试使用全局卸载create-react-app,并再次运行npx命令。我仍然收到相同的消息,即我应该全局卸载create-react-app,即使如此,全局安装的唯一模块是我机器上的npm

  • 我正努力让你去工作。以下是功能组件: 我称之为: 我得到一个错误,如下所示: 错误:无效的钩子调用。钩子只能在函数组件的主体内部调用。发生这种情况的原因如下:1。React和渲染器(如React DOM)2的版本可能不匹配。你可能违反了Hooks 3的规则。同一应用程序中可能有多个React副本。 我已经调试并确认我使用的是单一版本。也许我使用状态钩子不正确? 这里是我调用自定义钩子的地方:

  • 我有一个简单的Java应用程序,我想用Jaeger测试跟踪,但遇到了错误。 Maven依赖- jaeger一体机- 这是代码- 我犯了个错误- 感谢任何帮助!