之前学习了fs
文件模块,我们可以通过建立服务器把自己的页面内容通过fs.readFileSync()
函数读取出来,再通过res.write(data)
把读取文件内容结果输出,这样就可以把页面渲染出来,但是fs
模块还是有局限,对于小的文件操作非常方便,但是如果做一个大的项目,牵扯的文件目录多了,fs
模块就会非常有局限性,所以就有了下面所介绍的stream
流的概念。
可读流fs.createReadStream("2.txt")
- 创建一个可读流,可以读取文件内容,他可以把文件大小划分流大小来读,这样就可以防止文件读取爆仓。
- 文件过大会导致渲染页面延迟,所以流的读取方式可以解决这一点。12345678var fs=require("fs");var rs=fs.createReadStream("2.txt");rs.on("data",function(chunk){console.log(chunk.toString());//chunk是一个buffer类型的数据,需要转换});rs.on("end",function(){console.log("文件读取完毕");});
可写流fs.createWriteStream("3.txt")
- 创建一个可写流,写的内容为可读流读取的结果,实现简单的文件复制。
piep()
方法实现流的流动。123var fs=require("fs");var ws=fs.createWriteStream("text");rs.pipe(ws);//使用pipe()方法,可以把可读流的读取内容写到可读流里。
爬虫crawler
- 根据读取文件的这种应用,我们可以读取别的网站,获取别的网站的内容,进而获取到网站数据,做一个简单的呈现.1234567891011121314151617181920212223242526272829303132333435var http=require("http");var cheerio=require("cheerio");function getData(str){var $=cheerio.load(str);//要爬取的部分内容的类名var arr=$(".link-dark");var dataTemp=[];arr.each(function(k,v){var title=$(v).text();var obj={id:(k+1),content:title}dataTemp.push(obj);})return dataTemp;}var server=http.createServer(function(req,res){res.setHeader("Content-type","text/html;charset='utf8'");//要爬取的网址var dataUrl="http://ok.lanou3g.com";http.get(dataUrl,function(ress){var str="";ress.on("data",function(chunk){str+=chunk;});ress.on("end",function(){var data=getData(str);for(var i=0;i<data.length;i++){res.write(`<p>${data[i]['content']}</p>`);}res.end();})});});