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

Cors问题由于Cors的原因,我还在pkg.json中设置了代理,并根据它设置了api,但该错误未被删除

胡和煦
2023-03-14

获取http://localhost:3000/api/fetch?search=12312321 404(Not Found)Reactjs和node js中的cors问题我在Reactjs中使用了代理方法,但无法消除,请帮助我

代理

“代理”:“http://localhost:5000/”

两者都试过

“代理”:“http://localhost:5000”

快速

registerRoute.route('/fetch/:id').get((req,res)=>{

console.log("called by someone ",req.params.id);

res.send(“OKEY WILL”);

});

将调用后端API的REACTJS函数

FetchNotification(){

    axios({

        'method':'GET',

        'url':'api/fetch',

        'headers': {

            'content-type':'application/octet-stream',

            'x-rapidapi-host':'example.com',

            'x-rapidapi-key': process.env.RAPIDAPI_KEY
         }
         ,
        'params': {

            'id':'12312321'
        },
    })


}

当我简单地调用Axios.Get it Perfect work时,但当我给它提供参数时,它会给出错误xhr:178 404 not found

也返回相同结果的简单服务器

常量express=require(“express”);

const cors=require('cors');

常量app=express();

var bodyParser=require('body-parser');

app.use(BodyParser.URlenCoded({extended:false}));

//解析应用程序/JSON

app.use(bodyParser.json());

app.use('*',cors());

app.get('/fetch/:id',(req,res)=>{

console.log(“calling”,req.params.id);

});app.listen(5000);

共有2个答案

帅锦
2023-03-14

我觉得有很多问题。我会试着一个一个地解决他们的问题。

首先,如果您正确地代理了请求(我认为您是按照package.json进行代理的),那么您就不需要cors包了。这样你就可以处理掉那个包裹了。

阅读更多关于为什么不应该让所有传入请求绕过CORS检查的内容->对于公共只读WebService启用CORS是否安全?

其次,您在前端指定的url是'url':'api/fetch',这意味着浏览器将调用http://localhost:3000/api/fetch?search=12312321,正如您在404的错误语句中看到的那样,它正确地执行了该操作。

在package.json中将代理指定为“proxy”:“http://localhost:5000”意味着您现在正在向http://localhost:5000而不是http://localhost:3000发出请求,但浏览器仍然认为它的http://localhost:3000。这就是代理的全部目的,也就是你如何愚弄浏览器在不抛出任何错误的情况下执行CORS。

但是,由于在服务器上,您正在监听app.get('/fetch/:id',(req,res)而不是app.get('api/fetch/:id',(req,res),因此它与此URL不匹配,因为您也没有在某个单独的路由器模块中显式处理以/api开头的请求

因此,您应该将axios调用中的url更新为url':'/fetch,而package.json中的代理值分别为“proxy”:“http://localhost:5000”url':'fetch“proxy”:“http://localhost:5000/”。注意我是如何使用/

您可以将express端的URL更新为app.get('api/fetch/:id',(req,res)

最后,每当您收到一个请求时,您需要返回一些值(字符串或JSON甚至状态代码)作为结果。在您的示例中,您只是console.log(“calling”,req.params.id);,没有向UI发回任何响应。

因此,即使您的404可以在修复URL后解决问题,您也会遇到请求超时错误(408),因为您的UI将一直等待来自服务器的响应,而您没有发送任何响应。

所以你应该做这样的事情:

app.get('api/fetch/:id',(req , res) => {
    console.log("calling",req.params.id);
    res.send("It worked");
});

注意返回响应的方式->https://expressjs.com/en/starter/hello-world.html如果您不想返回响应,那么您可以简单地返回200、504等状态。

萧懿轩
2023-03-14

我可以看到您使用Nodejs作为服务器端。因此,您可以尝试更改下面的行

app.use('*',cors());

app.use(cors());

如果这不能解决问题,你可以尝试为CORS添加一个google chrome扩展(最有可能)。这样,您就不需要为运行服务器设置任何代理。

另外,您需要在URL中做一个小的更改,而不是调用

'url':'api/fetch'

您需要在调用中提供一个id,因为后端api正在接受一个参数

'url':'api/fetch/some_id'
 类似资料:
  • 我的网址不同。 错误: CORS策略阻止从https://url.example.com/b/478Lhttp://localhost:3000访问XMLHttpRequest:对预试请求的响应不通过权限改造检查:请求的资源上不存在访问控制允许起源标头。

  • 所以我已经实现了一个Spring引导JAVA应用程序作为服务器和角作为前端。所以实际上,当我在本地运行这些时,一切都很好。 但是当我为两者构建Docker映像并尝试将它们作为容器进行测试时,我面临着CORS错误。 由于我使用JWT令牌作为安全性,我已经禁用了crsf和默认的Spring Security令牌。所以在这里您可以看到CORS的JAVA配置; 这就是nginx。形态 即使我尝试在同一网络

  • 问题内容: 我知道这个问题已经问过几次了。 但是,我无法获得这些解决方案。 我正在运行标准安装的node.js和socket.io。(来自Amazon EC2上的yum) 问题是Chrome退回到xhr轮询,并且这些请求需要有效的CORS配置。但是,我似乎无法正常工作。我的Web服务器在端口80上运行,而node.js(socket.io)在端口81上运行。如您所见,我试图使socket.io使用

  • 我正在尝试在PHP服务器上允许CORS我有以下代码 和一个使用jquery获取它的简单ajax请求 我在我的开发工具上不断得到这个CORS错误 HTTP/1.1 200 OK日期:Mon,31 Aug 2015 17:25:33 GMT Content-Type:Text/HTML Content-Length:97 连接:Keep-alive Keep-alive:Timeout=30 服务器:

  • 我已经有以下CORS问题好几天了,我不打算解决它。localhost:4200上的Angular应用程序不允许我访问上传照片的路径。 我的后台在拉勒维尔 我可以登录、注册和执行其他帖子请求,但不能这样。 这是我的应用程序的图像。 这是我注册为全球中间件的CORS中间件] 网络选项卡中的响应标头 1

  • 所以我有以下中间件: 但是javascript假设cors没有启用?