如何从node.js的http请求中发送formdata?

时间:2017-09-28 22:30:21

标签: javascript node.js http multipartform-data form-data

我正在尝试使用表单数据在https请求中上传文件。我有这个

function uploadDocument(filepath) {
    var options = {
        host : 'myserver',
        port : 443,
        path : '/platform-api/v1/documents',
        method : 'POST',
        headers : {
            'Authorization' : 'Bearer 56356363',
            'Accept' : 'application/json'
        }
    };
    var req = https.request(options, function(res) {
        var buffer = "";
        res.on('data', function(chunk) {
            buffer += chunk;
        });
        res.on('end', function(chunk) {
            var json = JSON.parse(buffer.toString());
            console.log(json);
        });
    });

    var form = new FormData();
    form.append('file', fs.createReadStream(filepath));
    form.append('project_id', 4);
    form.pipe(req);

    req.on('error', function(e) {
        console.log('problem with request:', e.message);
    });
    req.end();
}

但我回来了

problem with request: write after end
{ errors:
   { file: 'missing-required-key',
     project_id: 'missing-required-key' } }

有谁知道出了什么问题?

由于

1 个答案:

答案 0 :(得分:0)

仅在已调用req.end()时才使用pipe

FormData是异步流,您不能在调用req.end()之后立即调用.pipe(req)。根据{{​​3}},默认情况下,管道在读取器流(表单本身)结束时为写入器流(在这种情况下为end())调用写入器流(在这种情况下为req)。

因此,当您不需要req.end()时,请使用pipe;如果您使用的是管道,请不要使用req.end()