Express 如何将文件上载到使用axios的graphql上载实现的graphql后端?

Express 如何将文件上载到使用axios的graphql上载实现的graphql后端?,express,graphql,axios,Express,Graphql,Axios,我使用和实现了一个GraphQL后端。我的GraphQL模式声明如下: type OProject { _id: ID! title: String! theme: String! budget: Float! documentation: String! date: Date } input IProject { title: String! theme: String! budget: Float! file:

我使用和实现了一个GraphQL后端。我的GraphQL模式声明如下:

type OProject {
    _id: ID!
    title: String!
    theme: String!
    budget: Float!
    documentation: String!
    date: Date
}

input IProject {
    title: String!
    theme: String!
    budget: Float!
    file: Upload!
}

type Mutations {
    create(data: IProject): OProject
}

type Mutation {
    Project: Mutations
}

我想使用对位于/GraphQL的graphqlapi发出
create
请求。我该怎么做呢?

遵循GraphQL多部分请求规范,您可以通过以下方式进行操作:

  • 创建实例并使用以下内容填充它:
    • 操作
      字段
    • 映射
      字段和
    • 要上载的文件
创建FormData实例

var formData=new formData();
操作
字段:

此字段的值将是一个JSON字符串,其中包含GraphQL
查询
变量
。必须将
变量
对象中的所有文件字段设置为空,例如:

const查询=`
突变($project:IProject!){
项目{创建(数据:$Project){u id}
}
`;
const项目={
标题:document.getElementById(“项目标题”).value,
主题:document.getElementById(“项目主题”).value,
预算:编号(document.getElementById(“项目预算”).value),
文件:空
};
const operations=JSON.stringify({query,变量:{project}});
formData.append(“操作”,operations);
地图
字段:

顾名思义,此字段的值将是对象的JSON字符串,其键是包含文件的FormData实例中字段的名称。每个字段的值将是一个数组,其中包含一个字符串,指示文件将绑定到
变量
对象中与值键对应的字段,例如:

const map = {
    "0": ["variables.project.file"]
};
formData.append("map", JSON.stringify(map));
要上载的文件 然后,您应该按照
映射
将文件添加到FormData实例。在这种情况下

const file=document.getElementById(“文件”).files[0];
formData.append(“0”,文件);
就这样。现在,您可以使用axios和FormData实例向后端发出请求:

axios({
url:“/graphql”,
方法:“张贴”,
数据:formData
})
。然后(响应=>{…})
.catch(错误=>{…});

Hi。我正在尝试将输入作为project类型的对象列表发送。输入必须是列表中每个条目的文件,因此我无法链接多个文件,每个项目一个文件。你知道怎样才能实现吗?我不明白你想实现什么。也许您可以提供一个代码片段来显示要发送的对象。