这可能是重复的,但是我还没有找到与我的问题有关的话题。
我正在进行以下API调用:
const config = {
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET,PUT,POST,DELETE,PATCH,OPTIONS"
}
};
const {
data: { ip }
} = await axios.get("https://api.ipify.org?format=json", config);
这会引发错误:
Access to XMLHttpRequest at 'https://api.ipify.org/?format=json' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
当我将应用程序部署到Heroku时,API调用将按预期工作。但是,在我的本地计算机上开发时,它不起作用。不确定我在这里缺少什么。
答案 0 :(得分:5)
几天后我终于找到了解决方案。而不是像这样简单地使用 CORS
const cors = require('cors');
app.use(cors());
在您的服务器 index.js 中使用 CORS 选项将解决该问题,现在您可以传递 cookie 或其他凭据
const cors = require('cors');
const corsOptions ={
origin:'http://localhost:3000',
credentials:true, //access-control-allow-credentials:true
optionSuccessStatus:200
}
app.use(cors(corsOptions));
答案 1 :(得分:2)
您不能真正从没有其他CORS策略来允许来自您域的请求的具有不同主机名的服务器中获取数据。
用简单的话来说,localhost
除非允许,否则无法调用ipify.org
。似乎没有,我认为服务器不是由您管理的。因此,您唯一的选择是使用反向代理。您可以阅读how to create an http proxy with node here。
您需要的是将应用程序提供给伪造/存根的主机,而不是本地主机:
local.development.ipify.org
-> localhost:3000
的代理
这样,当您进行api调用时,您与ipify.org
处于同一个域,并且不会遇到任何CORS问题。
答案 2 :(得分:1)
您似乎想要做的就是告诉服务器它应该使用您在Axios调用中指定的CORS策略。这根本不是事情的运行方式-服务器定义了自己的CORS策略,您只需遵守这些策略即可。如果您要访问的服务器在其CORS策略中不支持http://localhost:3000
,则不能在API中使用该来源。
如果服务器是您的服务器,请查看cors软件包并将其配置为允许localhost:3000
作为源。如果您不拥有服务器,则不能在不询问服务器所有者是否愿意的情况下真正更改任何CORS策略。
答案 3 :(得分:1)
This article立即解决了我的问题。
最快的解决方法是安装moesif CORS extension。安装后,在浏览器中单击它以激活扩展。确保图标的标签从“关闭”变为“打开”
答案 4 :(得分:0)
如果要在nodejs中构建rest api。遵循以下简单步骤
停止Node.js服务器。
npm install cors --save
在server.js或index.js中添加以下行
var cors = require('cors')
app.use(cors()) // Use this after the variable declaration
现在尝试在客户端进行api调用,它应该可以正常工作
答案 5 :(得分:0)
转到您的package.json文件并添加: “ proxy”:“您的api-url”,但仅以开头/结尾,例如,如果您使用的是神奇宝贝api,则只需设置“ proxy”:“ https://pokeapi.co/api/v2” 在服务文件中,可以将axios与所需的路径配合使用:
axios.get("/pokemon?limit=1000")
.then(response => {
resolve(response.data.results);
})
答案 6 :(得分:0)
这可能是由于来自POST
模式下的react app的development
请求。您可以通过在'文件中添加以下代码行来绕开开发模式下的CORS策略。
{
...
"proxy": "http://localhost:3000",
...
}
答案 7 :(得分:0)
首先,在像Express应用这样的后端应用中,您必须启用cors
like:
npm i cors
var cors = require('cors');
app.use(cors())
3.cors将使您的客户端或前端应用程序能够访问您的后端路由。最终转到您的路线并在内部获得路线并粘贴以下几行
router.get("/", (req, res) => {
res.setHeader("Access-Control-Allow-Origin", "*")
res.setHeader("Access-Control-Allow-Credentials", "true");
res.setHeader("Access-Control-Max-Age", "1800");
res.setHeader("Access-Control-Allow-Headers", "content-type");
res.setHeader( "Access-Control-Allow-Methods", "PUT, POST, GET, DELETE, PATCH, OPTIONS" );
});
` 我也经历了两个小时的时间来解决这个问题,并像这样解决了我的问题。因此希望对您有帮助