从nodejs将表单数据发送到API

时间:2020-09-24 12:45:01

标签: node.js graphql

以前,我使用rest API将文件上传到服务器。我有输入类型文件,并且正在使用该API将表单数据发送到服务器。一切正常,但现在我必须使用graphql突变。我们有一个运行apollo服务器的应用程序,在该应用程序中,我使用相同的API上载了我们的图像,但似乎文件对象的格式与其余API期望的格式不同。所以我的问题是我们如何才能像在浏览器中通过nodejs创建相同的文件对象一样。

我们正在使用RESTDataSource在graphql应用程序中进行HTTP调用

我的模式

type Mutation {
   uploadFile(file: Upload!): Boolean!
}

这是我的解析器

import { createWriteStream, createReadStream } from 'fs';
import FormData from 'form-data';

async uploadFile(file: any): Promise<any> {
        const url = new URL(`https://dev.dummber.com/portal/file/v1/uploadFile`);
        const { createReadStream: apolloFileStream, mimetype, filename }  =  await file;
        const tempFilename = `${filename}`;
        const stream = apolloFileStream();
        const wstream = createWriteStream(tempFilename);
        await new Promise((resolve, reject) => {
            stream
                .pipe(wstream)
                .on('finish', () => resolve())
                .on('error', () => reject());
        });
        const rstream = createReadStream(tempFilename);
        const formData = new FormData();
        formData.append('uploadingFile', rstream);
        const response = await this.post(url.toString(),
            {
                data: formData
            }
        , {
            headers: {
                'Content-Type': 'multipart/form-data'
            }
        });

        return true
    }

0 个答案:

没有答案