前言
在现代 Web 应用程序开发中,文件上传是必不可少的功能之一。而随着 GraphQL 的大力推广,开发者们将不得不考虑如何在 GraphQL 中处理文件上传。在 GraphQL 中使用文件上传可以是一项棘手的任务,因为 GraphQL 并没有提供与文件上传有关的内置解决方案。然而,我们可以使用一些第三方库来处理这个问题。
其中,@jstwrt/apollo-upload-server 是一个流行的 npm 包,用于实现文件上传到 GraphQL 服务器的解决方案。这个包的主要特点是方便易用,并且基于 Apollo-Server,是一个完全符合 GraphQL 标准的解决方案。在本文中,我们将介绍如何使用 @jstwrt/apollo-upload-server 来处理文件上传功能。
安装 npm 包
首先,我们需要使用 npm 安装 @jstwrt/apollo-upload-server 包。我们可以通过以下命令进行安装:
$ npm install @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