Nodejs流学习系列之四: Nodejs流的应用例子
前言
理论花了三篇文章,也算是基本讲完了Nodejs流的一些基础知识,理论是给实践服务的,我们这篇文章也就没有那么多知识了,通过两个小应用来解决我在实际项目中遇到的两个问题。实际情况当然比这里的demo复杂,这里是我简化过的,所以大家清楚解决思路即可,无须纠结内在的一些细节哈。
问题一
在平时的Nodejs应用中,我们也许需要去处理文件的内容,有时候甚至需要分析文件内容,然后保留相关信息输出给用户看。因此假设我们有这么一个文件,里面的内容是每行都有不定数目的随机字母,我们需要统计每一行的每个字母的个数,然后输出这么一个对象: { line: 1, statistics: [ { letter: 'd', length: 6 }, { letter: 'f', length: 10 }, { letter: 'j', length: 2 }, { letter: 'n', length: 2 }, { letter: 'o', length: 4 }, { letter: 's', length: 8 } ] .... }
该问题没有看答案之前大家可以自己想想如何实现。对应的实现代码可以参考下面的链接:
实现原理:
此题除了利用了Transform流之外还用了下面这些代码:
1const firstStep = chunk.match(/[a-zA-Z]/g).sort().join('').match(/(\w)\1+/g) 2// 这样得到的结果应该是诸如这样的: ['aaaaa','bbb','ccc'.....] 3// 这样就很容易统计每个字母出现的个数了! 4return firstStep.map(item => { 5 const res = { letter: item[0], length: item.length } 6 return res 7})
其中设计到的一个正则表达式可以拿出来说一下。
/(\w)\1+/g
的用法叫做分组反向引用(Grouping and back references),其中:
- (\x)是用于匹配然后记住这个匹配,这种做法叫做捕获组。捕获组根据左括号的顺序开始编号,从1开始,匹配到的字符串都可以在结果数组中直接使用下标引用到,或者从预定义的RegExp对象的属性9。
- \n:当n是一个正数,那么反向引用的是匹配到第n个捕获组
- +: 匹配1次或者更多次,等价于{1,}
更多关于反向引用的可以参考别的文档。
问题二
这个问题也是在实际项目中遇到的,解析CSV文件。实际上网上已经有类似的包,但是我们现在想要自己手动实现一个解析器。这次我们将借助于两个包: through2
和split2
。
关于这两个包的介绍可以参考: nodejs-useful-packages
相关代码在: application2
总结
Nodejs流的学习零零散散地学了将近一个月了,官方文档前前后后读了估计有四五遍。可以说这是目前我学习nodejs最长的一个模块,当然其他模块还没开始,以前都是随随便便当做手册查询,没有深入到代码逻辑,也没有详细地深入文档。以后以此为开头,深入地学习Nodejs,将更多的干货贡献给大家。
参考
公众号关注一波~
网站源码:linxiaowu66 · 豆米的博客
Follow:linxiaowu66 · Github
关于评论和留言
如果对本文 Nodejs流学习系列之四: Nodejs流的应用例子 的内容有疑问,请在下面的评论系统中留言,谢谢。