Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从后台运行的下载中获取下载状态_Javascript_Node.js_Session_Asynchronous_Express - Fatal编程技术网

Javascript 从后台运行的下载中获取下载状态

Javascript 从后台运行的下载中获取下载状态,javascript,node.js,session,asynchronous,express,Javascript,Node.js,Session,Asynchronous,Express,我要做的就是在这里。我的代码格式如下。当用户在/下载时提交表单,我调用downloadAllImages函数,downloadAllImages函数将所有下载放在后台,图像将存储在服务器上,因为它将异步运行,并在后台发送响应下载图像。。。给用户。我有一个会话变量req.session.download_status,我将在每次下载完成时递增该变量,用户将通过在/get_download_status提交表单获得其下载状态,该表单将返回req.session.download_status变量的值

我要做的就是在这里。我的代码格式如下。当用户在/下载时提交表单,我调用downloadAllImages函数,downloadAllImages函数将所有下载放在后台,图像将存储在服务器上,因为它将异步运行,并在后台发送响应下载图像。。。给用户。我有一个会话变量req.session.download_status,我将在每次下载完成时递增该变量,用户将通过在/get_download_status提交表单获得其下载状态,该表单将返回req.session.download_status变量的值。但在后台运行的线程上获取下载状态是不起作用的,它会在本地更新控制台增量上打印的req.session.download_status值,并且用户只获取下面代码中的初始化值0。我正在使用express创建应用程序

var request = require("request");

function downloadAllImages()
{
    ...
    ...
    ...

    req.session.download_status = 0;

    for(var i=0; i<total_images;i++)
    {
        source  = "path/to/file/which/will/be/downloaded";
        url     = "path/to/save/file";
        download(source, url, i, function(message){
            //updating the session.download_status variable in callback
            req.session.download_status++;
            console.log(req.session.download_status);
        });
    }
    return res.send("Downloading images in background...");
}

var download = function(uri, filename,i,callback){
    request.head(uri, function(err, res, body){
        request(uri).pipe(fs.createWriteStream(filename)).on('close',function(){
            console.log("image "+i+" downloaded!");
            callback("ok");
            });
        });
}
因此,我需要的是一种方式,通过这种方式,后台线程可以更新应用程序中某个变量的值,在我的情况下,会话变量的值不起作用,这样我就可以通过在/get_download_状态下反复提交表单向用户显示下载进度,并在下载完成时停止。
请提出我能得到它的任何方法。谢谢。

提供函数serving/get_download_status这只是返回req.session.download_status变量的值。app.post'/download_status',functionreq,res{ifreq.user{console.logdownload_status=+req.session.download_status;res.sendreq.session.download_status.toString;}其他{res send;}