type-graphql mutation配合GraphQLUpload传多参数测试报错如何解决
问题定位
这个问题是Postman测试配置错误导致的,不属于服务端代码逻辑问题。
报错的核心原因是服务端将你提交的id参数错误解析为了Upload类型的Promise对象,和你定义的String类型校验规则冲突,才抛出了类型不匹配的错误。
解决步骤
1. 按GraphQL multipart上传规范配置Postman请求
GraphQL文件上传需要遵循固定的form-data提交规则,具体配置如下:
- 请求方式选POST,地址填你的GraphQL接口地址,Body类型选
form-data - 添加如下3个必填form字段:
- 字段名
operations,值为JSON格式的请求体,普通参数直接写在variables中,上传文件的变量值填null:
{ "query": "mutation UserUploadPostPhoto($photo: Upload!, $id: String!) { userUploadPostPhoto(photo: $photo, id: $id) }", "variables": { "photo": null, "id": "你需要传递的实际ID值" } }- 字段名
map,值为JSON格式的变量映射,用来将后续的文件字段关联到variables中定义的上传变量:
{ "0": ["variables.photo"] }- 字段名
0,字段类型切换为File,值选择你要上传的本地照片即可
- 字段名
2. 服务端可选校验(按上述配置还是报错时检查)
如果调整Postman配置后仍有同类型报错,检查服务端配置是否符合要求:
- 确认你使用的
GraphQLUpload是从graphql-upload包导入的 - 如果你用Express作为HTTP服务框架,需要在注册GraphQL服务中间件之前先注册上传中间件:
import { graphqlUploadExpress } from 'graphql-upload'; // 放在ApolloServer/其他GraphQL中间件注册之前 app.use(graphqlUploadExpress({ maxFileSize: 10 * 1024 * 1024, // 单文件最大10MB,可自行调整 maxFiles: 1 }));
内容的提问来源于stack exchange,提问作者Emad Baqeri
相关产品推荐
相关产品推荐

