我正在基于 Node.js 的 Web 应用程序中进行 CSV 导入。
大多数给定的 CSV 文件都有数万条记录,并且需要几分钟的时间。
因此,在导入完成之前,我想向用户显示“当前正在导入...”消息。
我想要创建的内容类似于 Github 的分叉屏幕。按存储库右上角的分叉按钮后,它会显示消息“分叉/应该只需要几秒钟”。直到 fork 完成。
此外,我想添加进度条来指示已处理记录的百分比。
目前我的实现是:
- 客户端发送带有 CSV 数据的请求
- 服务器处理接收到的 CSV 并将记录插入数据库。
- 如果 CSV 有效,服务器响应 200。
但实施后用户无法看到当前状态。甚至有时候socket会挂掉。
我正在考虑以下重新实现:
- 客户端发送带有 CSV 数据的请求
- 服务器响应 200 告诉客户端已收到 CSV
- 服务器开始处理收到的 CSV 并将记录插入数据库。
但是,我不知道:
- 客户如何知道导入已完成
- 客户端如何知道 CSV 处理和 DB 插入何时发生错误
服务器端如何实现?
提前致谢 ;)
你需要使用socket.io
在这里跟踪进度。一旦您收到 CSV,您的客户端就可以连接到套接字。
Server:
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
});
如果需要更清晰的说明,请发表评论。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)