1 内容提要
- 使用module组织代码
- 编码规范
- 使用callback处理一次性事件
- 使用event emitter处理重复事件
- 实现串行流和并行流的控制
2 总结
2.1 使用module组织代码
假设我们现在面临一个自己编写的代码与第三方库发生命名冲突的问题,有两种方法:一,改变自己的,二,改变别人的。如果改变自己的,就会影响到所有使用到这段代码的地方,而如果改变别人的,那么每次更新第三方库就要改一遍名字,这两种方法的影响都不小,所以最好完全避免命名冲突。
Node的module就很好地解决了命名冲突的问题。通过exports对象或者module.exports,我们可以选择application所需的方法或变量。
2.1.1 创建module。
module可以是一个文件,也可以是文件夹。如果module是一个文件夹,一般而言,入口文件将以index.js命名。下面以一个简单的货币转换module为例。
首先创建一个名为currency_app的文件夹,在这个文件夹下创建一个currency.js,它就是一个module,内容如下:
var canadianDollar = 0/91;
function roundTwoDecimals(amount) {
return Math.round(amount * 100) / 100;
}
exports.canadianToUS = function(canadian) {
return roundTwoDecimals(canadian * canadianDallar);
}
exports.USToCanadian = function(us) {
return roundTwoDeciamls(us / canadianDollar);
}
只为exports对象设置了两个属性,一个是canadianToUS,一个是USToCanadian,也就是说,currency module所在的应用只能使用canadianToUS和USToCanadian两个属性。而canadianDollar就变为了一个私有变量,仅供module中的其他方法使用。
为了用这个currency module,还需要在currency_app下加一个test-currency.js,其内容如下:
var currency = require('./currency');
console.log('50 Canadian dollars equals this amount of US dollars: ');
console.log(currency.canadianToUs(50));
console.log('30 US dollars equals this amount of canadian dollars: ');
console.log(currency.USToCanadian(30));
这两个文件的结构如图: