了不起的Node.js:将JavaScript进行到底

书名:SMASHING Node.js : JavaScript Everywhere

原作者:(美)劳奇 Rauch.G

译者:赵静

出版日期:2014.1

Node中的JavaScript

1. global对象

在浏览器中,全局对象指的是window对象。在window对象上定义的所有内容(属性和函数)都可以被全局访问到。

setTimeout  === window.setTimeout
document === window.document

Node中的2个全局对象:

  • global--类似window对象,global对象上的属性都可以被全局访问到
  • process-所有全局执行上下文中的内容都在preocess对象中。

2. 模块系统

Node内置了很多实用的模块作为基础工具,包括http、net、fs等。

Node摒弃了采用定义一堆全局变量的方式,转而引入了一个简单却强大无比的模块系统,该模块系统有3个核心的全局对象:requiremoduleexports

绝对模块

绝对模块是指Node通过在其内部node_modules查找到的模块,或者Node内置的如fs这样的模块。

require('http');
require('fs');

直接通过名字来require这个模块,无须添加路径名的,就是绝对模块。

对于使用npm来安装的模块,例如安装colors模块,当安装完毕后,其路径就变成了./node_modules/colors

可以直接通过名称来require。

require('colors);

这种情况也是绝对模块。

相对模块

相对模块是将require指向一个相对工作目录中的js文件。例如

require('./src/module_a');
require('./src/module_b');

暴露API

暴露一个对象

在默认情况下,每个模块都会暴露出一个空对象。可以使用exports来暴露对象的属性和函数。

// module_a.js
exports.name = 'john';
exports.data = 'this is some data'; var privateVar = 5; exports.getPrivate = function(){
return privateVar;
}

在main.js 中调用

var a = require('./src/module_a');

console.log(a.name); //john
console.log(a.data); // this is some data
console.log(a.getPrivate()); // 5

暴露一个构造函数

person.js

module.exports = Person; // 对module.exports重写

function Person(name){
this.name = name;
} Person.prototype.talk = function(){
console.log('my name is' , this.name);
}

main.js

var Person = require('./src/person');

var John = new Person('John');
John.talk(); // my name is John

事件

在Node中事件的监听和分发使用EventEmit,定义了on 、 emit、once等方法。

使用EventEmitter

var EventEmitter = require('events');
var a = new EventEmitter();
a.on('event', function(){
console.log('event called.');
}); a.emit('event');

让自定义的类也可以使用事件监听,需要继承自EventEmitter。

使用原型继承方式

修改person.js

module.exports = Person;

function Person(name){
this.name = name;
} const EventEmitter = require('events');
Person.prototype = new EventEmitter; Person.prototype.talk = function(){
console.log('my name is' , this.name);
}

在main.js中调用

var Person = require('./src/person');

var John = new Person('John');
John.talk();
John.on('sleeping', function(){
console.log('sleeping called.')
}); John.emit('sleeping');

ES6继承方式

const EventEmitter = require('events');

class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
console.log('an event occurred!');
});
myEmitter.emit('event');

3. 文件系统

Node中使用fs模块操作文件。

同步读取文件

var fs = require('fs');

// 同步获取当前目录的文件列表
console.log(fs.readdirSync('.'));

异步读取文件(推荐方式)

var fs = require('fs');
// 异步的方式
function async(err, files){
console.log(files);
} fs.readdir(__dirname, async);

流对象

process全局对象中包含了3个流对象,分别对应3个Unix标准流。

  • stdin 标准输入
  • stdout 标准输出
  • stderr 标准错误

当前工作路径

process.cwd();
// or
__dirname

监视文件变化

使用fs.watchFile 或fs.watch监视文件变化

var fs = require('fs');
function callBackFiles(err, files){
files.forEach(function(file){
// 监听后缀是css的文件
if(/\.css/.test(file)){
fs.watchFile(process.cwd() + '/' + file, function(){
console.log(' - ' + file + ' changed!');
});
}
});
}
var files = fs.readdir(process.cwd(), callBackFiles);

当修改index.css文件并保存后,控制台将输出。

Smashing Nodejs 读书笔记(二)的更多相关文章

  1. Smashing Nodejs 读书笔记(一)

    了不起的Node.js:将JavaScript进行到底 书名:SMASHING Node.js : JavaScript Everywhere 原作者:(美)劳奇 Rauch.G 译者:赵静 出版日期 ...

  2. 深入浅出Nodejs读书笔记

    深入浅出Nodejs读书笔记 转:http://tw93.github.io/2015-03-01/shen-ru-qian-chu-nodejs-reading-mind-map.html cate ...

  3. 《你必须知道的.NET》读书笔记二:小OO有大原则

    此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.单一职责原则 (1)核心思想:一个类最好只做一件事,只有一个引起它变化的原因 (2)常用模式:Fa ...

  4. spring揭秘 读书笔记 二 BeanFactory的对象注册与依赖绑定

    本文是王福强所著<<spring揭秘>>一书的读书笔记 我们前面就说过,Spring的IoC容器时一个IoC Service Provider,而且IoC Service Pr ...

  5. ES6读书笔记(二)

    前言 前段时间整理了ES6的读书笔记:<ES6读书笔记(一)>,现在为第二篇,本篇内容包括: 一.数组扩展 二.对象扩展 三.函数扩展 四.Set和Map数据结构 五.Reflect 本文 ...

  6. spring揭秘 读书笔记 二 BeanFactory的对象注冊与依赖绑定

    本文是王福强所著<<spring揭秘>>一书的读书笔记 我们前面就说过,Spring的IoC容器时一个IoC Service Provider,并且IoC Service Pr ...

  7. 【记】《.net之美》之读书笔记(二) C#中的泛型

    前言 上一篇读书笔记,很多小伙伴说这本书很不错,所以趁着国庆假期,继续我的读书之旅,来跟随书中作者一起温习并掌握第二章的内容吧. 一.理解泛型 1.为什么要使用泛型?-----通过使用泛型,可以极大地 ...

  8. Mastering Web Application Development with AngularJS 读书笔记(二)

    第一章笔记 (二) 一.scopes的层级和事件系统(the eventing system) 在层级中管理的scopes可以被用做事件总线.AngularJS 允许我们去传播已经命名的事件用一种有效 ...

  9. nodejs爬虫笔记(二)---代理设置

    node爬虫代理设置 最近想爬取YouTube上面的视频信息,利用nodejs爬虫笔记(一)的方法,代码和错误如下 var request = require('request'); var chee ...

随机推荐

  1. 牛客练习赛33 E tokitsukaze and Similar String (字符串哈希hash)

    链接:https://ac.nowcoder.com/acm/contest/308/E 来源:牛客网 tokitsukaze and Similar String 时间限制:C/C++ 2秒,其他语 ...

  2. css3 transform中的matrix矩阵

    CSS3中的矩阵CSS3中的矩阵指的是一个方法,书写为matrix()和matrix3d(),前者是元素2D平面的移动变换(transform),后者则是3D变换.2D变换矩阵为3*3, 如上面矩阵示 ...

  3. u-boot makefile $$

    define filechk_uboot.release    echo "$(UBOOTVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setl ...

  4. 将pip源更换到国内镜像

    将pip源更换到国内镜像用pip管理工具安装库文件时,默认使用国外的源文件,因此在国内的下载速度会比较慢,可能只有50KB/s.幸好,国内的一些顶级科研机构已经给我们准备好了各种镜像,下载速度可达2M ...

  5. DevExpress ASP.NET Core Controls 2019发展蓝图(No.5)

    本文主要为大家介绍DevExpress ASP.NET Core Controls 2019年的官方发展蓝图,更多精彩内容欢迎持续收藏关注哦~ [DevExpress ASP.NET Controls ...

  6. html2canvas 把h5网页保存为图片 区域保存

    html2canvas 把h5网页保存为图片 想把一个网页得某些元素,绘制成图片保存,有些数据是接口动态加载的,所以不能UI给到图片,需要我们把api的数据也绘制到图片上 html2canvas这个插 ...

  7. 【Luogu4299】首都

    BZOJ权限题. 洛谷 题目描述 在X星球上有N个国家,每个国家占据着X星球的一座城市.由于国家之间是敌对关系,所以不同国家的两个城市是不会有公路相连的. X星球上战乱频发,如果A国打败了B国,那么B ...

  8. python-语言播报

       利用系统自带模块: 在cmd中  python -m pip install pypiwin32   安装win32com模块 import win32com.client sp=win32co ...

  9. 【leetcode】838. Push Dominoes

    题目如下: 解题思路:本题题目中有一点要求很关键,“we will consider that a falling domino expends no additional force to a fa ...

  10. linux运维、架构之路-Kubernetes集群部署TLS双向认证

    一.kubernetes的认证授权       Kubernetes集群的所有操作基本上都是通过kube-apiserver这个组件进行的,它提供HTTP RESTful形式的API供集群内外客户端调 ...