Javascript 如何在nodejs readline过程中更新html页面
我想在nodejs readline过程中动态更改html页面中元素的内容 下面是一个JSFIDLE示例,展示了我想要实现的显示效果: 但是我希望动态显示本地文件中的行,而不是像JSFIDLE示例中那样显示函数中定义的数组中的行 我在读取文件版本clickTest()函数中使用了readline模块:Javascript 如何在nodejs readline过程中更新html页面,javascript,html,node.js,node-webkit,Javascript,Html,Node.js,Node Webkit,我想在nodejs readline过程中动态更改html页面中元素的内容 下面是一个JSFIDLE示例,展示了我想要实现的显示效果: 但是我希望动态显示本地文件中的行,而不是像JSFIDLE示例中那样显示函数中定义的数组中的行 我在读取文件版本clickTest()函数中使用了readline模块: function clickTest(){ var fs = require('fs'); var lineReader = require('readline').createInte
function clickTest(){
var fs = require('fs');
var lineReader = require('readline').createInterface({
input: fs.createReadStream(filePath)
});
lineReader.on('line', function(line){
document.getElementById("demo").innerHTML += line;
});
}
但是当我单击按钮时,页面就像被冻结一样,然后这些行同时显示(而不是像上面的JSFIDLE示例中所示的那样一行一行地显示) 首先,每次调用该函数时,都会执行
require('readline')
和require('fs')
,因此我会在脚本中将其上移
我建议采取两种办法:
暂停阅读
var readline = require('readline');
var fs = require('fs');
function clickTest(){
var lineReader = readline.createInterface({
input: fs.createReadStream(filePath)
});
lineReader.on('line', function(line){
// pause emitting of lines...
lineReader.pause();
// write line to dom
document.getElementById("demo").innerHTML += line;
// Resume after some time
setTimeout(function(){
lineReader.resume();
}, 1000);
});
lineReader.on('end', function(){
lineReader.close();
});
}
这种方法应该读一行,然后在指定的时间后暂停并继续
缓冲线
var readline = require('readline');
var fs = require('fs');
var lines = [];
function clickTest(){
var lineReader = readline.createInterface({
input: fs.createReadStream(filePath)
});
lineReader.on('line', function(line){
lines.push(line)
});
lineReader.on('end', function(){
lineReader.close();
printLine(0);
});
}
function printLine(index){
// write line to dom
document.getElementById("demo").innerHTML += lines[index];
if (index < lines.length - 1){
setTimeout(function(){
printLine(index + 1);
}, 1000);
}
}
var readline=require('readline');
var fs=需要('fs');
var行=[];
函数clickTest(){
var lineReader=readline.createInterface({
输入:fs.createReadStream(文件路径)
});
lineReader.on('line',函数(line){
线。推(线)
});
lineReader.on('end',function(){
lineReader.close();
打印线(0);
});
}
函数打印行(索引){
//将行写入dom
document.getElementById(“demo”).innerHTML+=行[索引];
如果(索引
这种方法将把所有行保存到一个数组中,然后慢慢地打印出来
请注意,我还没有实际测试node webkit,因此您可能会在代码中发现一个bug,但它应该能让您大致了解您在这里混合了服务器端和客户端操作。您不能在客户端上使用fs模块读取文件,而在节点上,您可以读取整个文件,然后将其发送到客户端。所以,您可能希望读取整个文件并将其发送到客户机,然后客户机设置时间间隔,或者打开套接字发送到客户机,并保持从节点到服务器的线路按原样发送read@Tom实际上,我已经使用了fs模块来读取文件(为什么不能?)。我的问题是如何在html页面中显示内容。您是否清楚地理解客户端和服务器之间的区别?只要我知道你不能读取客户端的本地文件(除非你在文件输入中明确选择它们)@Tom哦,天哪,伙计。。。原谅我,我不认为你说的和我的问题有任何联系。好吧,让它成为事实,就像你说的,我可能不知道客户端和服务器之间的区别。但实际上我已经逐行读取了本地文件——我可以使用console.log在devTool中输出这些行。我的问题是如何在我的HTML页面中动态输出这些行(每次只输出一行)。。。您上面发布的代码不会在您的客户端(浏览器)中运行。如果我没有弄错的话,没有
require
或fs
。两者都是特定于节点的。是的,如果您特别允许用户选择本地文件并使用html5文件API,您可以读取本地文件。如果你有那个代码,把它贴在这里,我可以帮你修复它。否则,您认为您是在客户机上完成的,但实际上是在服务器上完成的(即使它的本地主机仍然是服务器),非常感谢。我的文件包含多达1000万行。所以我只能遵循第一种方法。每秒写一行1000万行?听起来像是可怕的用户体验对我来说。。。10万行每秒打印一行需要116天才能打印出来。