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

如何在JavaScript中实现简单的GraphQL查询

简景焕
2023-03-14
const fetch = require("node-fetch")
fetch('https://api.example.com/graphql', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'X-Api-Service-Key': '123456789077',
  },
  body: JSON.stringify({query: "query($fruitId: String!) { fruit(id: $fruitId) { id, name } }",
  variables: { "fruitId": "ikttwwwbvn7" }})
})
  .then(r => r.json())
  .then(data => console.log('data returned:', data));
curl -H 'Content-Type: application/json' -X POST -H "X-Api-Service-Key: 123456789077" https://api.example.com/graphql -d '{ "query": "query($fruitId: String!) { fruit(id: $fruitId) { id, name } }", "variables": { "fruitId": "ikttwwwbvn7" }}'
fetch('https://api.example.com/graphql', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'X-Api-Service-Key': '123456789077',
  },
  body: JSON.stringify({query: "query($fruitId: String!) { fruit(id: $fruitId) { id, name } }",
  variables: { "fruitId": "ikttwwwbvn7" }})
})
  .then(r => r.json())
  .then(data => console.log('data returned:', data));

我得到一个错误:

CORS策略阻止了在“https://api.example.com/graphql”从来源“chrome-search://local-ntp”获取:对飞行前请求的响应没有通过访问控制检查:请求的资源上没有“access-control-allog-orgin”标头。如果一个不透明的响应满足您的需要,请将请求的模式设置为“no-cors”,以便在禁用CORS的情况下获取资源。

注意:我的endpoint实际上是不同的,但除此之外,这个示例与我的示例本质上是相同的。

共有1个答案

韶云瀚
2023-03-14

没有办法绕过浏览器强制执行的同源策略。通过curlnode发送请求时不会遇到同样的问题,因为在这些上下文中没有强制执行同源策略。它总是在浏览器中强制执行,除非您显式禁用它。但是,阻止跨域请求是一种导入安全措施,因此禁用它通常是不可取的。

像Apollo这样的GraphQL客户端的工作方式并不神奇。他们仍然在暗中使用fetch。如果您使用fetch处理CORS问题,那么您将使用Apollo或任何其他基于浏览器的客户端处理相同的问题。如果您使用像Postman或Altair这样的独立客户端,那么您不会使用,因为同样,您处理的不是浏览器。

正如您链接的文章中所建议的,这是一个必须在服务器端解决的问题。如果您不向自己的服务器发出请求,唯一可行的解决方案是使用代理。您可以利用现有的一个或运行自己的一个。

 类似资料:
  • 问题内容: 在JavaScript中实现单例模式的最简单/最干净的方法是什么? 问题答案: 我认为最简单的方法是声明一个简单的对象文字: 如果您希望单例实例上有私人成员,则可以执行以下操作: 这就是所谓的模块模式,它基本上可以让你来封装对象私有成员,通过采取利用的优势关闭。 更新: 我想补充一点,如果要防止修改单例对象,可以使用ES5 方法冻结它。 这将使对象不可变,从而防止对其结构和值进行任何修

  • 本文向大家介绍javascript实现继承的简单实例,包括了javascript实现继承的简单实例的使用技巧和注意事项,需要的朋友参考一下 作为一门面向对象的语言,那么继承自然就是一大特征,下面是一段非常简单代码实例,它演示了实现继承的基本原理,有兴趣的或者恰好要学习此方面的朋友可以参阅一下,希望能够给大家来帮组。 以上所述就是本文的全部内容了,希望大家能够喜欢。

  • 本文向大家介绍javascript实现的闭包简单实例,包括了javascript实现的闭包简单实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript实现的闭包。分享给大家供大家参考。具体如下: 希望本文所述对大家的javascript程序设计有所帮助。

  • 本文向大家介绍javascript实现简单的进度条,包括了javascript实现简单的进度条的使用技巧和注意事项,需要的朋友参考一下 示例一: 再来分享一个结合.net的 建立一个WEB工程,添加新项->HTML页面,命名为ProgressBar.htm,内容如下: 后台代码,Default.aspx.cs:

  • 本文向大家介绍javascript实现的简单计时器,包括了javascript实现的简单计时器的使用技巧和注意事项,需要的朋友参考一下 最近写了很多微信端的互动小游戏,比如下雪花 限时点击 赢取奖品,限时拼图,限时答题等,都是些限时‘游戏'(其实算不上游戏,顶多算是具有一点娱乐性的小互动而已) 上面出现了4个限时,对,没错,这里记录的就是最近写的 ‘计时器' ... 恩 , 计时器 就一个setI

  • 本文向大家介绍如何实现Java中一个简单的LinkedList,包括了如何实现Java中一个简单的LinkedList的使用技巧和注意事项,需要的朋友参考一下 LinkedList与ArrayList都是List接口的具体实现类。LinkedList与ArrayList在功能上也是大体一致,但是因为两者具体的实现方式不一致,所以在进行一些相同操作的时候,其效率也是有差别的。 对于抽象的数据结构——