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

在现代 Web 应用中,文件上传已经成为了必不可少的一部分。如果使用 GraphQL 技术栈来开发应用的话,上传文件将会是一个更加引人注目的问题。好在社区中出现了一些非常不错的解决方案来支持文件上传,其中就包括了 @gutenye/apollo-upload-server 这个 npm 包。在此篇文章中,我们将会深入了解如何使用这个 npm 包。

什么是 @gutenye/apollo-upload-server?

@gutenye/apollo-upload-server 是一个用于从客户端上传文件到服务器的 Apollo Server 托管服务的集成解决方案。它允许用户使用 GraphQL 请求/响应框架,并且通过使用 multipart/form-data 来支持多文件上传。

安装

使用 npm 安装 @gutenye/apollo-upload-server 包。

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

使用方法

创建 multer-storage

在首先必须要创建 multer-storage,来设置上传文件的 destination 和 file name。在这一步中,我们采用可回调函数的方式来注册存储器。这样可以得到更加灵活的设置方式,允许我们在将来更改存储策略。

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

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

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

在这段示例代码中,我们使用磁盘存储器 multer.diskStorage 来创建 upload 的存储。文件将被存储在根目录下的 /uploads 子目录中。文件名将使用带有时间戳前缀的原始文件名创建。时间戳前缀旨在避免同时上传多个具有相同文件名的文件的可能性。

上传文件到服务器

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

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

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

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

在这段代码中,我们使用 Apollo Server 来创建我们的 GraphQL API。然后我们使用 applyMiddleware 函数来将 Apollo Server 和我们的 Express 应用程序一起使用,并将 GraphQL API 映射到 /graphql 路径。

接下来,我们使用将 multer 存储对象 upload 作为参数传递给 graphqlUploadExpress 函数来设置我们的文件上传服务。graphqlUploadExpress 函数返回一个 Express 中间件,允许我们将图像上传服务映射到 /upload 路径。这样,我们就建立了 Express 路径与 GraphQL 路径之间的联系。

GraphQL TypeDefs

在 TypeDefs 中,定义我们的 schema 文件,包含 Query 和 Mutation。

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

GraphQL Resolvers

在 Resolvers 中,实现我们的逻辑。

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

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

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

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

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

在这段代码中,我们先引入了 nodejs 的 fs 模块,用于将上传的文件流写入磁盘。作为 GraphQLUpload 的引用模块,使用 upload 标记来从请求传递中获取上传的文件流。在每个 Resolver 中,将该文件流期望到存在的字段的 key 中(这里是 createReadStream);

返回包含有文件上传信息的对象:

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

简单测试

启动本地服务器后,可以选择任意一种方式来验证我们的 Resolver:

  1. 通过 curl 发送查询请求
---- -- ---- -- -------------- -------------------- -- ------------- -------- --------- ------- -------- - ------------------ ------ - --------- --------- --------- --- - --- ------------ - ------- ---- - -- -- ------ ---- ------------------ -- -- ------------------------ -----------------------------
  1. 通过 POSTman 发送查询请求

打开 POSTman,创建一个新的 POST 请求,并在 header 中添加 content-type 为 multipart/form-data。然后,在 body 中选择文件选项,选择要上传的文件并发送请求。

结论

总之,在本文中,我们深入了解了如何使用 @gutenye/apollo-upload-server 来开发更加灵活的 GraphQL 应用。我们了解了如何使用 multer 模块上传图像,并将其发送到 GraphQL 服务中。此外,我们还探讨了如何在 Resolver 中处理上传的图像,并且将其存储到多部分表单数据中。

复杂的项目中,你可以通过设置适当的存储策略来优化代码,将文件存储在内存中,而不是磁盘上,以提高性能等。

希望本文对你有所帮助!

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/60055a9881e8991b448d8139


猜你喜欢

  • npm 包 toggle-js 使用教程

    前言 toggle-js 是一个在前端开发中常用的 npm 包,它可以方便地实现网页中的开关组件,有很强的可定制性。在开发过程中,我们经常会遇到需要开关组件的需求,toggle-js 可以大大减少我们...

    2 年前
  • npm 包 vrestapi 使用教程

    前言 在前端开发中,经常会遇到需要和 RESTful API 进行交互的情况。而 vrestapi 是一个 Node.js 的 npm 包,提供了非常方便的方式来模拟 API 接口和测试 API 接口...

    2 年前
  • npm 包 react-animate-on-scroll-server 使用教程

    react-animate-on-scroll-server 是一款 React 组件,能够让在滚动页面的过程中进行动画渲染。使用 react-animate-on-scroll-server,您可以...

    2 年前
  • npm包basic-mouse-event-polyfill-phantomjs使用教程

    前言 在前端开发中,我们经常需要使用鼠标事件来实现一些交互效果。但是,由于不同浏览器对鼠标事件的支持存在差异,特别是一些旧版本的浏览器并未支持较新的鼠标事件。此时,我们就需要使用polyfill来解决...

    2 年前
  • npm包aws-apig-client使用教程

    前言 在Web应用程序开发过程中,我们经常需要与后端API进行交互。Amazon Web Services(AWS)提供了一系列服务来帮助我们构建和部署Web应用程序。

    2 年前
  • npm 包 bizboard-firebase-paginator 使用教程

    前言 在前端应用中,经常需要对大量数据进行分页处理,而在基于 Firebase 的应用中,bizboard-firebase-paginator 这个 npm 包提供了非常方便的分页功能,可以快速将 ...

    2 年前
  • npm 包 eslint-config-straylor 使用教程

    前言 在现代的前端开发中,JavaScript 代码的质量已经越来越受到重视。为了保证代码风格的一致性,可以使用 ESLint 工具进行代码规范检查。同时,社区中也出现了许多基于 ESLint 的配置...

    2 年前
  • npm 包 agentstack-restify 使用教程

    在前端开发过程中,使用一些高效的工具可以加快开发速度,提高代码质量。其中,npm是前端常用的包管理工具,agentstack-restify是一个在Restify框架和Node中间件上基于Web Sc...

    2 年前
  • npm 包 prompt-grid 使用教程

    1. 引言 在前端开发中,经常需要与用户进行交互。而 prompt 是一个用于与用户交互的基本工具,可以用于输入和确认等操作。但是,使用原生 prompt 的交互体验并不太好,因此我们需要一个更加丰富...

    2 年前
  • npm 包 expressflix 使用教程

    前言 Node.js 是一个非常优秀的后端技术,甚至被用于开发全栈应用。而在 Node.js 生态系统中,npm 是非常重要的一环,可以让前端开发者更加便捷地开发后端应用。

    2 年前
  • npm 包 create-react-app-skeleton 使用教程

    在前端开发中,React 是一个非常流行的 JavaScript 库,它用于构建用户界面。但是,创建一个 React 应用程序可能会涉及到很多的配置和工作,这会消耗开发者大量的时间和精力。

    2 年前
  • npm 包 express-wake 使用教程

    在前端开发中,我们经常需要使用 node.js 来搭建服务器。但是在服务器运行期间,我们通常需要在服务器闲置时进行一些操作,例如清理垃圾文件、更新缓存数据等。此时,我们就需要一个类似 ping 服务器...

    2 年前
  • npm 包 microbrew 使用教程

    什么是 microbrew? microbrew 是一个快速创建框架级别 web 应用的 npm 包。它采用 koa 作为底层框架,并提供了一些好用的功能,例如路由、中间件、参数校验等。

    2 年前
  • npm 包 asciicast-read-stream 使用教程

    简介 asciicast-read-stream 是一个在 Node.js 环境下使用的开源 npm 包,提供了对 AsciiCast 录屏文件的读取和解析功能。AsciiCast 是一种记录终端会话...

    2 年前
  • npm包 react-native-calendar-hfjy 使用教程

    前言 在 React Native 的开发中,我们经常需要使用日历来展示时间数据。而 react-native-calendar-hfjy 是一个功能强大且易用的 React Native 日历组件,...

    2 年前
  • npm 包 test-git-as-npm-source 使用教程

    #npm 包 test-git-as-npm-source 使用教程 在前端开发中,我们常常需要使用一些开源的第三方 npm 包来加速开发过程。而通常情况下,这些 npm 包都是发布在 npm 官方仓...

    2 年前
  • npm 包 live-site-test 使用教程

    在开发前端网站的过程中,我们需要不断地进行测试以保证网站的稳定性和流畅性。一个网站的上线是一个复杂而艰辛的过程,需要经过多轮的测试和反复的修复。针对这个问题,我们推荐使用 npm 包 live-sit...

    2 年前
  • npm 包 @fulminate/fulminate-config-builder 使用教程

    在前端开发中,配置文件对于项目的管理至关重要。我们经常需要在不同的环境中使用不同的配置,为了避免手动修改配置文件,我们可以使用自动化工具来生成新的配置文件。@fulminate/fulminate-c...

    2 年前
  • npm 包 express-swag 使用教程

    简介 express-swag 是一个能够自动生成 Swagger API 文档的中间件,它依赖于 express 框架。使用 express-swag 能够很方便的将 express 应用程序的路由...

    2 年前
  • npm 包 f7-vue-cli 使用教程

    随着移动应用的日益普及,前端框架也得到了越来越广泛的应用和关注。f7-vue-cli 是一个特别好用而且适合移动端开发的前端框架,能够帮助开发者快速搭建现代化的移动应用。

    2 年前

相关推荐

    暂无文章