显示在服务器端

时间:2015-08-07 08:41:50

标签: ajax node.js

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

因此,在导入完成之前,我想向用户显示"目前导入..."消息。

我想要创建的内容类似于Github的分叉屏幕。按下repo右上角的fork按钮后,会显示消息" Forking / It只需要几秒钟。"直到叉完成 另外,我想添加进度条以指示处理过的记录的百分比。

目前我的实施是:

  1. 客户端使用CSV数据发送请求
  2. 服务器处理收到的CSV并将记录插入数据库。
  3. 如果CSV有效,服务器将回复200。
  4. 但是实施用户无法看到当前状态。甚至有时插座也会挂断。

    我正在考虑重新实施:

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

      1. 客户如何知道导入已完成
      2. 客户端如何知道CSV处理和数据库插入时发生错误
      3. 如何实现服务器端? 在此先感谢;)

2 个答案:

答案 0 :(得分:3)

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

服务器:

io.on('connection', function (socket) {
    console.log('CONNECTED');
    socket.join('progressSession');
});

您可以定期发出progress事件,让客户知道您已处理了多少条记录。 (我希望您以异步方式处理记录,或者至少可以在其间运行其他代码)

io.sockets.in('progressSession').emit('progress', noOfRecords);

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

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

评论是否需要更清晰。

答案 1 :(得分:1)

立即发送请求,立即返回状态以确认或拒绝CSV valididy并完成响应。然后使用http://socket.io/之类的内容向客户端发送更新。