您必须知道的几个Node.js编码习惯

您必须知道的几个Node.js编码习惯

前言

前面的两篇,以sacdl工程为例,简单介绍了Node.js的环境搭建和代码组织。这一篇,做个简单的小结,把涉及到的编码习惯用我个人的理解,提示性的说明一下。

编程,其实就是用特定的语言讲故事、写规则。特定就是习惯,就像中国的方言,掌握了技巧,很快可以交流,剩下的细节慢慢积累就是。

比特币体现了人类去中心化的本质,Node.js也是最能体现人类特质的编程语言之一,比如:一切都是数据流,事事皆回调。下面,让咱们慢慢品鉴一下吧。

1、一切都是数据流

概念理解

Node.js默认提供了Stream模块,即:流,我们在第二篇讲解gulp的时候说起过。作为一个抽象接口,它是Node.js的基础模块,被其他很多模块所使用。

流,最早是linux环境下的概念,与之对应的方法经常是pipe,即:管道(方法)。我个人理解,这种设计非常形象合理。流的概念存在于人类生活的任何场景,数据流,与水流、空气流等具有相同的特性。如:

(1)流,兼具时间和地点两个坐标,时间代表一个过程,地点代表流入、流出(对应发生、结束的编码)位置;

(2)流,是一个时间上的线性过程,而非一个时间点。在时间段内的传输只是部分数据,若要获得完整的数据,就需要花费足够的时间;

(3)流,只能沿着构建在从发生到结束的编码位置的管道传输,在传输的过程中,可以被调整和改变;

再直白一些,流,不可能一下子发生或结束,再快也得有个时间差。就像人类社会,始终以时间为单位,这一刻到下一刻,已经发生变化。而Node.js严格尊重这个现实,无论是远程访问,还是本地请求,每一个data都被分成一段一段数据流(通常是Buffer对象)传输。

因此,Node.js里没有简单拷贝的概念,或者说拷贝其实可以通过流来简单实现。

代码示例

比如:

//引用模块
var fs = require('fs');

var rs = fs.createReadStream('test.md');
var chunks = [],
    size = 0;

//接受数据:一段段的接受
rs.on("data", function (chunk){
  chunks.push(chunk);
  size += chunk.length;
});

//拼接数据,并转换为字符串(**注**:如果 test.md 不是 UTF-8 编码格式的,如果直接
//转换为字符串,可能会出现乱码,这时需要使用其他的模块(比如:iconv-lite)来进行转换)
rs.on("end", function() {
  var data = Buffer.concat(chunks, size);
  var str = data.toString("utf8");
  console.log(str);
});
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值