javascript - Node.js 进度指示器反馈

标签 javascript node.js

我对使用 Node.js“请求”发送的进度有疑问。我有一个充当代理的 Node.js 应用程序,实际上将主体转发到另一台服务器。我想查看此上传操作的进度。现在我正在这样做:

BROWSER 
   -> UPLOAD TO NODE 
   -> UPLOAD TO 3rd PARTY SERVICE 
   -> RETURN 3rd PARTY RESPONSE TO BROWSER

如果可能的话,我会记录它以在 console.log 中检查完成了多少进度。但是,是否也可以返回一个

res.send(progress)

与此同时,在等待上传完成并发送回客户端时上传是否成功?

BROWSER 
   -> UPLOAD TO NODE
   -> UPLOAD TO 3rd PARTY SERVICE 
       -> RETURN progress <- 
       -> RETURN progress <- 
       ...etc.
   -> RETURN 3rd PARTY RESPONSE TO BROWSER

这是上传代码(非常简单)。

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);
    }
});

最佳答案

您的问题包含两部分。一种是从请求中获取进度,可以在这里找到:Upload Progress — Request

另一部分是通知浏览器进度。 HTTP 协议(protocol)不允许您发送多个响应,因此无法使用 res.send(progress)

但是,您可以继续发送部分响应,直到它完成。向 res 写入内容而不关闭它就像 res.write("string") 一样简单,但访问响应可能更难:Accessing partial response using AJAX or WebSockets?

您还需要一种方法来包装来自后备服务器的正文(以及错误),以便它可以作为最终的部分响应。

另一个解决方案是打开另一个 WebSocket 请求来跟踪上传/下载过程。 socket.io 是用于此目的的一个很好的 Node 库。

关于javascript - Node.js 进度指示器反馈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32435830/

相关文章:

node.js - Electron.remote 未定义

javascript - NodeJS 和 GraphicsMagick : resize() destroys image quality

javascript - 如何更改div子元素中的所有元素id

node.js - 如何正确地清理 npm 缓存?

javascript - 在 JavaScript 中格式化动态表格

javascript - 如何使用 x-www-form-urlencoded 强制 Angular2 进行 POST

node.js - node-sqlite3 中的错误处理

javascript - 删除 channel 的困惑

javascript - 如何保护 Chrome 应用中的某些代码?

javascript - 使用 ionic 根据输入文本计算价格