Rië*_*iël 3 javascript node.js
我对使用Node.js“请求”发送的进度有疑问。我有一个充当代理的Node.js应用程序,实际上将主体转发到另一台服务器。我想查看此上传操作的进度。现在我正在这样做:
BROWSER
-> UPLOAD TO NODE
-> UPLOAD TO 3rd PARTY SERVICE
-> RETURN 3rd PARTY RESPONSE TO BROWSER
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我将其记录下来以检查console.log取得了多少进展。但是,也有可能返回一个
res.send(progress)
Run Code Online (Sandbox Code Playgroud)
同时,在等待上传完成并将客户端发送回客户端的同时,上传成功了吗?
BROWSER
-> UPLOAD TO NODE
-> UPLOAD TO 3rd PARTY SERVICE
-> RETURN progress <-
-> RETURN progress <-
...etc.
-> RETURN 3rd PARTY RESPONSE TO BROWSER
Run Code Online (Sandbox Code Playgroud)
这是上载代码(非常简单)。
var requestOptions = {
timeout: 120000,
url: url, //URL to hit
method: 'post',
headers: headers,
body: payload //Set the body as a string
};
request(requestOptions, function (error, response, body) {
if (error) {
res.send(error);
}
else {
//res.sendStatus(response.statusCode);
console.log("[RETURNING RESPONSE BODY]");
res.send(body);
}
});
Run Code Online (Sandbox Code Playgroud)
您的问题分为两部分。一种是从请求中获取进度,可以在这里找到:上传进度-请求
另一部分将通知浏览器进度。HTTP协议不允许您发送多个响应,因此res.send(progress)无法使用。
但是,您可以继续发送部分响应,直到完成为止。在不关闭res的情况下编写某些内容就像一样简单res.write("string"),但是访问响应可能会更困难:使用AJAX或WebSockets访问部分响应?
您还需要一种从后备服务器包装正文(以及错误)的方法,以使其可以作为最终的部分响应。
另一个解决方案是打开另一个WebSocket请求以跟踪上载/下载过程。socket.io是用于此目的的不错的节点库。
| 归档时间: |
|
| 查看次数: |
5209 次 |
| 最近记录: |