【发布时间】:2020-10-29 10:56:30
【问题描述】:
注意:为了保护隐私,api Key 是伪造的。
const url = 'http://newsapi.org/v2/everything?' +
'q=platformer&' +
'apiKey=3ce15c4d1fd3485cbcf17879bab498db';
async function getNews() {
const response = await fetch(url);
const data = await response.json();
console.log(data);
}
getNews()
问题是当我运行这个 javascript 代码时,我得到了这个错误:
CORS 策略已阻止从源“null”访问“http://newsapi.org/v2/everything?q=platformer&apiKey=3ce15c4d1fd3485cbcf17879bab498db”获取:无“访问控制-请求的资源上存在 Allow-Origin' 标头。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。
基本上我想从这个 newsapi.org 中提取新闻并在控制台中查看数据。
【问题讨论】:
-
由于网站的 CORS 政策,您无法从其他域获取数据。一个解决方案是在 Node.js 中使用 axios
-
确实,在服务器端发出请求会更好。因为您的 API 密钥是私有的。它不应与任何人共享,因此不应嵌入到您的前端代码中。这就是 API 未启用 CORS 的原因。 Docs "您可以通过以下三种方式之一将您的 API 密钥附加到请求中:- apiKey 查询字符串参数。- X-Api-Key HTTP 标头。- 授权 HTTP 标头。我们强烈推荐后者 2 以便其他人在日志或请求嗅探中看不到您的 API 密钥。”
标签: javascript json fetch-api