GraphQL 是一种用于 API 的查询语言,支持多种数据类型和自定义类型。GraphQL 也有一个很好的特性,支持上传文件。Fastify 是一个快速高效的 Web 框架,但默认不支持上传文件。本文将介绍如何将 Fastify 和 GraphQL 结合起来支持上传文件。
前置知识
- JavaScript
- GraphQL
- Fastify
- fastify-multipart 插件
实现思路
- 使用
fastify-multipart
插件解析文件上传。 - 使用
graphql-upload
插件将上传的文件转换为 GraphQL 中的Upload
类型。 - 在 Fastify 的 GraphQL 插件中注册
Upload
类型,以支持文件上传。
实现步骤
1. 安装依赖
npm install fastify fastify-graphql fastify-multipart graphql graphql-upload
2. 创建 Fastify 应用实例
-- -------------------- ---- ------- ----- ------- - --------------------- -- ----- ------- -- -------------------------------------------- ---- -- ---- -------------------- ----- -- - -- ----- - ------------------- ---------------- - ---
3. 注册 fastify-multipart
插件
-- -------------------- ---- ------- ----- ------- - --------------------- ----- --------- - ----------------------------- --------------------------- ---- -- ----- ------- -- --- -------------------- ----- -- - -- ----- - ------------------- ---------------- - ---
4. 创建 GraphQL 上传的中间件
const { graphqlUploadExpress } = require('graphql-upload'); const graphqlUploadMiddleware = graphqlUploadExpress();
5. 在 Fastify 的 GraphQL 插件中注册 Upload
类型
-- -------------------- ---- ------- ----- - -------------------- - - -------------------------- ----- - ---------------- - - -------------------------- ----- ----------------------- - ----------------------- -------------------------------------------- - ------- --------- ----- ------- --------------- ----- ------------ ----- ------------- ------ -- ----- -------- -- ------------ ------------------------- ------------------ -- --- ---
6. 编写 GraphQL Mutation
extend type Mutation { uploadProfilePicture(file: Upload!): Boolean! }
7. 编写执行上传文件的逻辑
fastify.graphql.addMutation('uploadProfilePicture', async (_, { file }) => { // 访问上传的文件 const { filename, mimetype, createReadStream } = await file; // ... 省略文件处理逻辑 return true; });
8. 完整代码
-- -------------------- ---- ------- ----- ------- - --------------------- ----- --------- - ----------------------------- ----- - -------------------- - - -------------------------- ----- - ---------------- - - -------------------------- ----- ------ - - ---- ----- - ------ ------ - ---- -------- - -------------------------- --------- -------- - -- ----- ------ - ----- ----- -------- -- - ------------------ ----- ----- ------ -- - ------------ ------- ---- --- --- -- ----- ----------------------- - ----------------------- --------------------------- ---- -------------------------------------------- - ------- --------- ----- ------- --------------- ----- ------------ ----- ------------- ------ ------------ ------------------------- ------------------ --- ----------------------------- --------- - --------------------- ----- --- - ---- -- -- - ----- - --------- --------- ---------------- - - ----- ----- -- --- ------ ----- -- -- --- -------------------- ----- -- - -- ----- - ------------------- ---------------- - ---
总结
本文介绍了如何使用 Fastify 和 GraphQL 支持文件上传。通过 fastify-multipart
插件解析上传的文件,再使用 graphql-upload
插件将其转换为 GraphQL 中的 Upload
类型,然后在 Fastify 的 GraphQL 插件中注册该类型,最后使用 GraphQL Mutation 执行文件上传的逻辑。希望本文对你有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645f01c1968c7c53b0120cad