首页 > 解决方案 > 从 nodejs 将表单数据发送到 API

问题描述

早些时候我使用 rest API 将我的文件上传到服务器。我有输入类型文件,我正在使用该 API 将表单数据发送到服务器。它工作正常,但现在我必须使用 graphql 突变。我们有一个运行应用程序的 apollo 服务器,我在其中使用相同的 API 上传我们的图像,但似乎文件对象的格式与 rest 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
    }

标签: node.jsgraphql

解决方案


推荐阅读