Smashing Nodejs 读书笔记(二)
了不起的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个核心的全局对象:require 、module 和exports 。
绝对模块
绝对模块是指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 读书笔记(二)的更多相关文章
- Smashing Nodejs 读书笔记(一)
了不起的Node.js:将JavaScript进行到底 书名:SMASHING Node.js : JavaScript Everywhere 原作者:(美)劳奇 Rauch.G 译者:赵静 出版日期 ...
- 深入浅出Nodejs读书笔记
深入浅出Nodejs读书笔记 转:http://tw93.github.io/2015-03-01/shen-ru-qian-chu-nodejs-reading-mind-map.html cate ...
- 《你必须知道的.NET》读书笔记二:小OO有大原则
此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.单一职责原则 (1)核心思想:一个类最好只做一件事,只有一个引起它变化的原因 (2)常用模式:Fa ...
- spring揭秘 读书笔记 二 BeanFactory的对象注册与依赖绑定
本文是王福强所著<<spring揭秘>>一书的读书笔记 我们前面就说过,Spring的IoC容器时一个IoC Service Provider,而且IoC Service Pr ...
- ES6读书笔记(二)
前言 前段时间整理了ES6的读书笔记:<ES6读书笔记(一)>,现在为第二篇,本篇内容包括: 一.数组扩展 二.对象扩展 三.函数扩展 四.Set和Map数据结构 五.Reflect 本文 ...
- spring揭秘 读书笔记 二 BeanFactory的对象注冊与依赖绑定
本文是王福强所著<<spring揭秘>>一书的读书笔记 我们前面就说过,Spring的IoC容器时一个IoC Service Provider,并且IoC Service Pr ...
- 【记】《.net之美》之读书笔记(二) C#中的泛型
前言 上一篇读书笔记,很多小伙伴说这本书很不错,所以趁着国庆假期,继续我的读书之旅,来跟随书中作者一起温习并掌握第二章的内容吧. 一.理解泛型 1.为什么要使用泛型?-----通过使用泛型,可以极大地 ...
- Mastering Web Application Development with AngularJS 读书笔记(二)
第一章笔记 (二) 一.scopes的层级和事件系统(the eventing system) 在层级中管理的scopes可以被用做事件总线.AngularJS 允许我们去传播已经命名的事件用一种有效 ...
- nodejs爬虫笔记(二)---代理设置
node爬虫代理设置 最近想爬取YouTube上面的视频信息,利用nodejs爬虫笔记(一)的方法,代码和错误如下 var request = require('request'); var chee ...
随机推荐
- Maven 添加其他Maven组件配置问题
在父工程的pom文件里,添加如下配置 <project> <!--其它配置--> <modules> <module>A项目文件夹</module ...
- Beta冲刺-(3/3)
这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/ 这个作业要求在哪里 https://edu.cnbl ...
- 图像语义分割出的json文件和原图,用plt绘制图像mask
1.弱监督 由于公司最近准备开个新项目,用深度学习训练个能够自动标注的模型,但模型要求的训练集比较麻烦,,要先用ffmpeg从视频中截取一段视频,在用opencv抽帧得到图片,所以本人只能先用语义分割 ...
- Codeforces 959 树构造 暴力求最小字典序互质序列
A B C 题目给你一个结论 最少需要min((odd,even)个结点可以把一棵树的全部边连起来 要求你输出两颗树 一棵树结论是正确的 另外一棵结论是正确的 正确结论的树很好造 主要是错误的树 题目 ...
- springboot 初探 、基础及配置
一.spring boot 的核心功能 独立运行的spring项目.内嵌servlet容器.提供starter简化maven配置.自动配置Spring.准生产的应用监控.无代码生成和xml配置二.sp ...
- 搭建DHCP服务实现动态分配IP地址-NTP网络时间同步
本节所讲内容: DHCP服务器工作原理 使用DHCP为局域网中的机器分配IP地址 使用DHCP为服务器分配固定IP地址 ntpdate加计划任务同步服务器时间 实验环境: 服务端:xuegod63 ...
- Flask【第2篇】:Flask基础
Flask基础 知识点回顾 1.flask依赖wsgi,实现wsgi的模块:wsgiref,werkzeug,uwsgi 2.实例化Flask对象,里面是有参数的 app = Flask(__name ...
- wepy-数据双向绑定input
初入wepy,发现wepy和vue神似,但还是有不一样的地方,例如v-model数据双向绑定 场景: 一个input搜索框,用户输入内容,点击“叉叉”按钮,输入的内容全部清空,这是一个很常见的场景 j ...
- python装饰器的简单理解
如果你接触 Python 有一段时间了的话,想必你对 @ 符号一定不陌生了,没错 @ 符号就是装饰器的语法糖. 装饰器的使用方法很固定: 先定义一个装饰函数(帽子)(也可以用类.偏函数实现) 再定义你 ...
- LeetCode--064--最小路径和
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入:[ [1,3,1], [1,5,1], ...