【问题标题】:How to send formdata in a http request from node.js?如何在 node.js 的 http 请求中发送表单数据?
【发布时间】:2017-09-28 22:30:20
【问题描述】:

我正在尝试使用表单数据在 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' } }

有谁知道怎么回事?

谢谢

【问题讨论】:

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


【解决方案1】:

pipe 已经被调用时,不要使用req.end()

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

所以当你不需要pipe时使用req.end(),如果你使用管道就不要使用req.end()

【讨论】:

    猜你喜欢
    • 2012-03-27
    • 1970-01-01
    • 2017-04-23
    • 2022-12-05
    • 1970-01-01
    • 2021-08-18
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多