【问题标题】:How do I send a form with a request promise?如何发送带有请求承诺的表格?
【发布时间】:2016-10-15 06:34:18
【问题描述】:

我正在尝试使用 request-promise 库或任何类似的东西通过从节点的发布请求发送文件到另一台运行节点的机器。使用普通的请求模块,我可以这样做

var req = request.post(url, function (err, resp, body) {
 if (err) {
    console.log('Error!');
  } else {
    console.log('URL: ' + body);
  }
});
var form = req.form();
form.append('file', '<FILE_DATA>', {
  filename: 'myfile.txt',
  contentType: 'text/plain'
});

此代码来自问题: Uploading file using POST request in Node.js 但是它没有使用承诺。

谁能解释如何做同样的事情,但使用 request-promise 库或者是否有任何其他方式来承诺这一点?

【问题讨论】:

  • 你想让req返回一个承诺吗?
  • 使用Promise的目的是什么?

标签: javascript node.js promise


【解决方案1】:

根据与您已经找到的答案链接的the docs,您不需要在生成的请求对象上使用.form() 方法,而是可以简单地将表单作为formData 选项传递给@ 987654325@。你也可以对 request-promise 做同样的事情:

requestPromise.post({url: url, formData: {
    file: {
        value: '<FILE_DATA>',
        options: {
            filename: 'myfile.txt',
            contentType: 'text/plain'
        }
    }
}).then(function(body) {
    console.log('URL: ' + body);
}, function(err) {
    console.log('Error!');
});

另外,request-promise 似乎仍然返回请求实例(只是用then/catch/promise 方法装饰),所以form 函数应该仍然可用:

var req = requestPromise.post(url);
var form = req.form();
form.append('file', '<FILE_DATA>', {
  filename: 'myfile.txt',
  contentType: 'text/plain'
});
req.then(function(body) {
    console.log('URL: ' + body);
}, function(err) {
    console.log('Error!');
});

【讨论】:

  • 我确实尝试过,但最终出现错误:未处理的拒绝 RequestError: Error: write after end
  • 哪一个?它是否适用于未承诺的request?并且:这是您使用的确切代码吗? FILE_DATA 来自哪里?我发布的代码不应该产生未经处理的拒绝。
  • 我已经设置了数据 let formData = { id: request._id.toString(), file: { value: fs.createReadStream(request.filePath), options: { 'filename': request.fileName , 'contentType': request.mineType } } };但无法在另一个服务器中获取文件 req.files 正在取消定义
  • @LaxmanMali 您可能想在ask a new question 发布两台服务器的整个代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-21
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 2017-02-28
相关资源
最近更新 更多