【发布时间】:2021-04-08 14:49:17
【问题描述】:
我有一个 nodejs express 应用程序,它充当客户端应用程序和 graphql api 之间的代理。 graphql api 实现了 graphql-multipart-request-spec。我正在使用 graphql-request 包来查询它。 代理应用使用nestjs和multer进行上传。
根据 graphql-request 文档,您可以像这样上传文件
const UploadUserAvatar = gql`
mutation uploadUserAvatar($userId: Int!, $file: Upload!) {
updateUser(id: $userId, input: { avatar: $file })
}
`
request('/api/graphql', UploadUserAvatar, {
userId: 1,
file: createReadStream('./avatar.img'),
})
但这意味着上传的文件已经保存到文件系统中。是否可以使用文件的缓冲区做同样的事情?
我尝试将缓冲区转换为 ReadableStream,如下所示:
const readable = new Readable()
readable._read = () => {} // _read is required but you can noop it
readable.push(file.buffer)
readable.push(null)
await request('/api/graphql', UploadUserAvatar, {
userId: 1,
file: readable,
})
但是graphql api返回如下错误:
多部分数据意外结束
【问题讨论】:
-
...异步/等待?
-
我对 promises 很熟悉,但我不明白应该如何解决我的问题
-
要求不关闭连接并返回响应 ...stackoverflow.com/q/60006391/6124657 ...
file是如何“提取”/请求处理[来自多部分]的? -
我正在使用 await,但为了示例,我省略了它。该文件是使用 multer 库提取的,如果我将其保存在光盘上,它可以工作,但在使用缓冲区时则不能
-
恕我直言,您应该显示整个上下文...stackoverflow.com/a/56087675/6124657 怎么样...您是否需要缓冲区?为什么不直接转发 FormData?
标签: node.js graphql multipartform-data