繁体   English   中英

快递 GraphQL - 上传文件

[英]Express GraphQL - upload files

我正在创建我的 Express-GraphQL api,我可以将所有内容存储在 MongoDB 中。 我正处于这样的地步:

项目 Mongo model:

const { Schema, model } = require("mongoose");

const projectSchema = new Schema({
  name: {
    type: String,
    require: true,
  },
  offer: [{ type: String }],
});

module.exports = model("Project", projectSchema);

我删除了除这 2 个以外的所有字段。字段报价必须是文件数组 - 例如,您可以有 2-3 个 pdf。

在我的类型中,我创建了项目类型:

const Project = new GraphQLObjectType({
  name: "Project",
  fields: () => ({
    _id: { type: GraphQLNonNull(GraphQLString) },
    name: { type: GraphQLNonNull(GraphQLString) },
    offer: { type: GraphQLList(GraphQLString) }, 
  }),
});

我想知道有没有一种方法可以创建可以在此报价字段中添加/上传文件的突变?

editProject: {
      type: Project,
      args: {
        projectId: { type: GraphQLNonNull(GraphQLString) },
        offer: { type: GraphQLList(GraphQLString) },  
      },

      async resolve(parentValue, args) {
        //some code here
      },
    },

如果我有这样的突变,我应该如何传递文件? 如果有人以前做过这样的事情,我将非常感谢分享我的经验:

  1. 不确定是否有可能
  2. 不知道如何在 GraphQL 突变查询中传递文件
  3. 不知道如何在 mongoDB 中准确存储文件(可能使用 GridFS)

非常感谢!

我已经使用 graphql 将近 2 年了。 当你面临这个问题时,我们也为此挠了挠头,直到我们发现你不能真正在突变查询中传递文件,但你可以做的是将文件从前端直接上传到云像 AWS S3 这样的服务,并在您的突变查询中传递 object 键以将其保存在您的数据库中。 要从 S3 再次获取它,您可以使用相同的密钥。 这样,您就不会在后端处理文件,并且仍然可以通过在前端呈现或下载的有效方式来保证它们的安全。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM