CORS 错误 - 错误:跨源 httplocalhost 禁止 - 仅在 ReactJSJest 测试中

reactjs

1个回答

写回答

18916489875

2025-06-19 00:50

+ 关注

ReactJS
ReactJS

CORS错误 - 错误:跨源http://localhost被禁止 - 仅在ReactJS/Jest测试中

在开发Web应用程序时,我们经常需要从不同的源加载资源,例如从一个域名加载CSS样式或JavaScript脚本。然而,出于安全原因,浏览器会实施一种称为跨源资源共享(CORS)的策略,以防止跨源请求。这意味着如果我们的应用程序在一个域名下运行,而试图从另一个域名请求资源,浏览器将阻止这个请求。

CORS错误是指在进行跨源请求时,浏览器返回的错误信息。当我们在ReactJS和Jest测试中遇到这个错误时,它通常是由于我们尝试在测试中模拟跨源请求而引起的。

案例代码:

假设我们有一个React组件,它从某个API加载数据并显示在页面上。为了在测试中模拟这个请求,我们可以使用Jest提供的mock函数来模拟API的返回值。然而,由于我们的测试代码运行在不同的源(localhost)下,我们可能会遇到CORS错误。

Javascript

import React, { useState, useEffect } from 'react';

import axIOS from 'axIOS';

const MyComponent = () => {

const [data, setData] = useState([]);

useEffect(() => {

const fetchData = async () => {

try {

const response = awAIt axIOS.get('https://api.example.com/data');

setData(response.data);

} catch (error) {

console.error(error);

}

};

fetchData();

}, []);

return (

<div>

{data.map(item => (

<div key={item.id}>{item.name}</div>

))}

</div>

);

};

export default MyComponent;

在上面的代码中,我们使用axIOS库发送GET请求来获取数据,并将其设置为组件的状态。然而,由于我们正在使用localhost进行测试,而API的域名是api.example.com,因此浏览器会阻止这个请求,并返回CORS错误。

解决CORS错误

为了解决CORS错误,我们可以使用一些技术手段。以下是一些常见的方法:

1. 代理服务器:设置一个代理服务器来转发我们的请求。我们可以使用工具如webpack-dev-server或http-proxy-middleware来配置代理服务器,将我们的请求转发到目标API。

2. 跨源资源共享(CORS)头部:如果我们有权限控制目标API的服务器,我们可以在响应中添加CORS头部来允许跨源请求。这可以通过在服务器上配置Access-Control-Allow-Origin和Access-Control-Allow-Methods来实现。

3. 模拟响应:在测试中,我们可以使用Jest的mock函数来模拟API的返回值,而不是实际发送网络请求。这样可以避免CORS错误。

使用代理服务器解决CORS错误

为了使用代理服务器解决CORS错误,我们可以使用webpack-dev-server来配置一个代理。以下是一个示例webpack配置文件的代码:

Javascript

const path = require('path');

module.exports = {

mode: 'development',

entry: './src/index.JS',

output: {

filename: 'bundle.JS',

path: path.resolve(__dirname, 'dist'),

},

devServer: {

proxy: {

'/api': {

target: 'https://api.example.com',

secure: false,

changeOrigin: true,

},

},

},

};

在上面的配置中,我们将所有以/api开头的请求代理到https://api.example.com。secure: false选项用于接受自签名证书,而changeOrigin: true选项允许我们修改请求的源。

通过这种配置,我们的请求将会被代理到目标API,而不会遇到CORS错误。

CORS错误是由于浏览器的跨源资源共享策略而引起的,当我们在ReactJS和Jest测试中模拟跨源请求时,可能会遇到这个错误。为了解决CORS错误,我们可以使用代理服务器、配置CORS头部或者模拟响应。在开发和测试过程中,我们需要注意处理CORS错误以确保我们的应用程序能够正常工作。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号