一、指令输出:
1.编辑器写一个js文件,控制台进入该文件目录 执行 node xxx.js
2.进入REPL模式(即输入-求值-输出循环):指令node 启动一个 JavaScript 的交互式 shell
二、调试工具supervisor:
node.js在修改代码之后需要重新启动 新代码才会生效,安装了supervisor之后,当检测到代码有改动的话就会重启项目。(已达到方便调试)
三、异步式 I/O 与事件式编程
node最大的特点就是异步式I/O(或者非阻塞I/O)与事件紧密结合的编程
阻塞(block):当线程遇到磁盘读写或者网络通信时(统称为IO操作)通常要耗费很长的时间,这时操作系统就会剥夺这个线程的CPU使用权,使其暂停,同时将资源让给其他线程,这种线程调度方式成为阻塞。
异步式I/O(或者非阻塞I/O)则针对所有I/O操作不采用阻塞的策略,当线程遇到 I/O 操作时,不会以阻塞的方式等待 I/O 操作 的完成或数据的返回,而只是将 I/O 请求发送给操作系统,继续执行下一条语句。当操作系统完成 I/O 操作时,以事件的形式通知执行 I/O 操作的线程,线程会在特定时候处理这个 事件。为了处理异步 I/O,线程必须有事件循环,不断地检查有没有未处理的事件,依次予 以处理。
单线程事件驱动的异步式 I/O 和多线程阻塞式 I/O
四、EventEmitter类
events 模块只提供了一个对象: events.EventEmitter。EventEmitter 的核心就是事件触发与事件监听器功能的封装。
EventEmitter.on(event, listener) 为指定事件注册一个监听器,接受一个字符串event 和一个回调函数listener。
EventEmitter.emit(event, [arg1], [arg2], [...]) 发射 event 事件,传递若干可选参数到事件监听器的参数表。
EventEmitter.once(event, listener) 为指定事件注册一个单次监听器,即监听器最多只会触发一次,触发后立刻解除该监听器。
EventEmitter.removeListener(event, listener) 移除指定事件的某个监听器,listener 必须是该事件已经注册过的监听器。
EventEmitter.removeAllListeners([event]) 移除所有事件的所有监听器, 如果指定 event,则移除指定事件的所有监听器。
你可以通过require("events");来访问该模块。
//event.js 文件
var EventEmitter = require('events').EventEmitter;
var event = new EventEmitter();
event.on('some_event', function() { //注册监听器
console.log('some_event 事件触发');
});
setTimeout(function() {
event.emit('some_event'); //发送事件
}, 1000);
当我们要把某个包作为工程运行时的一部分时,通过本地模式获取,如果要 在命令行下使用,则使用全局模式安装
本地模式:npm install xxx
全局模式:npm install -g xxx
//在 Linux/Mac 上使用 npm install -g 安装时有可能需要 root 权限, 因为 /usr/local/lib/node_modules/ 通常只有管理员才有权写入。
npm 提供了一个有趣的命令 npm link,它的功能是在本地包和全局包之间创建符号链 接。我们说过使用全局模式安装的包不能直接通过 require 使用,但通过 npm link命令 可以打破这一限制。举个例子,我们已经通过 npm install -g express 安装了 express, 5 这时在工程的目录下运行命令:
$ npm link express
./node_modules/express -> /usr/local/lib/node_modules/express
我们可以在 node_modules 子目录中发现一个指向安装到全局的包的符号链接。通过这 种方法,我们就可以把全局包当本地包来使用了。
//npm link 命令不支持 Windows
Util
util.inherits(constructor, superConstructor) 是一个实现对象间原型继承的函数。
//只继承函数不继承属性
util.inspect(object,[showHidden],[depth],[colors]) 是一个将任意对象转换 为字符串的方法