npm 包 @jstwrt/apollo-upload-server 使用教程

阅读时长 5 分钟读完

前言

在现代 Web 应用程序开发中,文件上传是必不可少的功能之一。而随着 GraphQL 的大力推广,开发者们将不得不考虑如何在 GraphQL 中处理文件上传。在 GraphQL 中使用文件上传可以是一项棘手的任务,因为 GraphQL 并没有提供与文件上传有关的内置解决方案。然而,我们可以使用一些第三方库来处理这个问题。

其中,@jstwrt/apollo-upload-server 是一个流行的 npm 包,用于实现文件上传到 GraphQL 服务器的解决方案。这个包的主要特点是方便易用,并且基于 Apollo-Server,是一个完全符合 GraphQL 标准的解决方案。在本文中,我们将介绍如何使用 @jstwrt/apollo-upload-server 来处理文件上传功能。

安装 npm 包

首先,我们需要使用 npm 安装 @jstwrt/apollo-upload-server 包。我们可以通过以下命令进行安装:

在 Apollo 服务器中使用 @jstwrt/apollo-upload-server

在 Apollo 服务器中使用 @jstwrt/apollo-upload-server 时,首先我们需要导入 createUploadMiddleware 方法。这个方法是用于创建 upload 中间件的工具方法。以下是示例代码:

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

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

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

在上面的示例中,我们导入了 @jstwrt/apollo-upload-server 中的 createUploadMiddleware 方法。然后,我们使用这个方法来创建一个 upload 中间件,并将这个中间件传入 Apollo 服务器的中间件列表中。此外,我们还需要将 uploads 配置项设置为 false,以禁用内置的 GraphQL 文件上传支持。

在 GraphQL Schema 中定义上传类型

在启用 @jstwrt/apollo-upload-server 后,我们需要在 GraphQL Schema 中定义一个可上传的类型。我们可以使用 GraphQL 的 Scalar 类型来定义文件类型。以下是示例代码:

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

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

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

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

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

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

在上面的示例中,我们定义了一个名为 "Upload" 的 Scalar 类型,这个类型用于表示可上传的文件。Upload 类型不需要任何解析器,因为 @jstwrt/apollo-upload-server 会自动处理这种类型。在 Mutation 类型中,我们还定义了一个 uploadFile 操作,用于接收一个可上传的文件,并将其存储到服务器上。

在 GraphQL Resolver 中处理上传请求

在 Resolver 中,我们需要定义 uploadFile 操作的处理程序。我们需要处理上传请求,并将文件保存到服务器上。以下是示例代码:

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

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

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

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

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

在上面的示例中,我们需要将 GraphQLUpload 导入 Resolver 中,并将其添加到 Upload 字段中。然后,在我们的 uploadFile 处理程序中,我们需要等待传入的文件,然后使用 createReadStream 方法创建一个文件流,并将文件保存为服务器上的文件。

结论

在这篇文章中,我们介绍了如何使用 @jstwrt/apollo-upload-server 包来处理 GraphQL 中的文件上传。我们讨论了如何在 Apollo 服务器中使用这个包,并定义了上传类型和 Resolver。如果你对文件上传功能感兴趣,希望你能够在实际项目中使用这个包。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005708781e8991b448e7ed1

纠错
反馈