如何在 GraphQL 服务器上执行跨域请求?

GraphQL 是一种用于 API 开发的查询语言和运行时环境。它可以让客户端根据需要指定需要的数据,从而避免不必要的数据传输和处理。然而,当我们在不同的域名或端口上使用 GraphQL 服务器时,可能会遇到跨域请求的问题。本文将介绍如何在 GraphQL 服务器上执行跨域请求。

什么是跨域请求?

跨域请求是指在一个域名下的网页通过 AJAX 等方式向另一个域名下的服务器请求数据,这种情况下浏览器会阻止跨域请求,以保护用户的安全。在 GraphQL 服务器上,如果客户端和服务器不在同一个域名或端口上,就会发生跨域请求的问题。

如何解决跨域请求?

1. 使用 CORS

CORS 是一种基于 HTTP 头部的机制,可以让 Web 应用服务器给跨域访问的网页提供访问权限。在 GraphQL 服务器上,我们可以通过设置 HTTP 响应头来允许跨域请求。下面是一个使用 Express 框架的示例代码:

----- ------- - -------------------
----- ----------- - ---------------------------
----- ---- - ----------------

----- ------ - --------------------

----- --- - ----------

---------------- -- ------

------------------- -------------
  ------- -------
  --------- ----
----

---------------- -- -- -
  -------------------- ------ -- ------- -- ---- -------
---

在上面的代码中,我们使用了 cors 中间件来允许跨域请求。这样客户端就可以从不同的域名或端口上访问 GraphQL 服务器了。

2. 使用 JSONP

JSONP 是一种跨域请求的解决方案,它利用了 <script> 标签没有跨域限制的特性。在 GraphQL 服务器上,我们可以将查询语句包装成一个 JavaScript 函数,并将函数名作为参数传递给服务器。服务器在返回数据时,将数据包装成函数调用的形式返回给客户端。客户端就可以通过回调函数来获取数据了。下面是一个使用 jQuery 的示例代码:

--------
  ---- -------------------------------------------------
  --------- --------
  ----- -
    ------ -
      -
        -----
      -
    -
  -
---

-------- ------------- -
  -----------------------------
-

在上面的代码中,我们使用了 jQuery 的 $.ajax 方法来发送 JSONP 请求。我们将 GraphQL 查询语句作为 data 参数传递给服务器,并在 url 参数中传递了回调函数名 getData。服务器在返回数据时,会将数据包装成 getData 函数调用的形式返回给客户端。客户端就可以通过回调函数来获取数据了。

总结

在 GraphQL 服务器上执行跨域请求,我们可以使用 CORS 或 JSONP 这两种解决方案。CORS 是一种基于 HTTP 头部的机制,可以让 Web 应用服务器给跨域访问的网页提供访问权限。JSONP 利用了 <script> 标签没有跨域限制的特性,将查询语句包装成一个 JavaScript 函数,并将函数名作为参数传递给服务器,在返回数据时,将数据包装成函数调用的形式返回给客户端。这两种解决方案都可以有效地解决 GraphQL 服务器上的跨域请求问题。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/662a96efd3423812e47fad14