Express 如何将文件上载到使用axios的graphql上载实现的graphql后端?
我使用和实现了一个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:
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多部分请求规范,您可以通过以下方式进行操作:
- 创建实例并使用以下内容填充它:
字段操作
字段和映射
- 要上载的文件
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类型的对象列表发送。输入必须是列表中每个条目的文件,因此我无法链接多个文件,每个项目一个文件。你知道怎样才能实现吗?我不明白你想实现什么。也许您可以提供一个代码片段来显示要发送的对象。