Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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
Ajax 显示在服务器端运行的长进程的状态_Ajax_Node.js - Fatal编程技术网

Ajax 显示在服务器端运行的长进程的状态

Ajax 显示在服务器端运行的长进程的状态,ajax,node.js,Ajax,Node.js,我正在基于Node.js的web应用程序中进行CSV导入。 大多数给定的CSV文件都有数万条记录,需要几分钟的时间 所以,在导入完成之前,我想向用户显示“当前正在导入…”消息 我想要创建的类似于Github的分叉屏幕。按下回购协议右上角的fork按钮后,会显示“Forking/应该只需要几秒钟”的消息,直到fork完成。 此外,我希望添加进度条,以指示处理记录的百分比 我目前的实施是: 客户端使用CSV数据发送请求 服务器进程接收到CSV并将记录插入数据库 如果CSV有效,服务器响应200 但通

我正在基于Node.js的web应用程序中进行CSV导入。 大多数给定的CSV文件都有数万条记录,需要几分钟的时间

所以,在导入完成之前,我想向用户显示“当前正在导入…”消息

我想要创建的类似于Github的分叉屏幕。按下回购协议右上角的fork按钮后,会显示“Forking/应该只需要几秒钟”的消息,直到fork完成。 此外,我希望添加进度条,以指示处理记录的百分比

我目前的实施是:

  • 客户端使用CSV数据发送请求
  • 服务器进程接收到CSV并将记录插入数据库
  • 如果CSV有效,服务器响应200
  • 但通过实施,用户无法看到当前状态。甚至有时插座也会挂断

    我正在考虑以下重新实施:

  • 客户端使用CSV数据发送请求
  • 服务器响应200以告知客户端已收到CSV
  • 服务器开始处理收到的CSV并将记录插入数据库
  • 但是,我不知道:

  • 客户如何知道导入已完成
  • 客户端如何知道CSV处理和数据库插入中何时发生错误
  • 如何实现服务器端?
    提前感谢;)

    按原样发送请求,立即返回状态以确认或拒绝CSV Validdy并完成响应。然后使用类似的方法向客户端发送更新。

    您需要在此处使用
    socket.io
    来跟踪进度。一旦您收到CSV,您的客户端就可以连接到套接字

    服务器:

    io.on('connection', function (socket) {
        console.log('CONNECTED');
        socket.join('progressSession');
    });
    
    您可以定期发出
    progress
    事件,让客户端知道您处理了多少条记录。(我希望您正在异步处理记录,或者至少可以在其间运行一些其他代码)

    而且,客户端可以监听
    进度
    事件并将其显示给用户

    var socket = io.connect('http://localhost:9000');
    socket.on('progress' , function (status){
        console.log(status);
        // show status to the user
    });
    
    如果需要进一步澄清,请发表评论

    var socket = io.connect('http://localhost:9000');
    socket.on('progress' , function (status){
        console.log(status);
        // show status to the user
    });