node.js(一)包管理、缓冲区、事件驱动、定时器
来源:互联网 发布:ubuntu安装mysql5.7 编辑:程序博客网 时间:2024/05/16 13:44
1. NPM包管理
(1) 本地模式:如果想在安装包时,不会对那些已经在本地安装的应用程序造成影响,那么本地模式十分适合。(尽量使用本地模式,除非模块作者要求某个模块需要以全局模式来安装。)
(2) 全局模式:适合安装那些全局可用的包,比如提供命令行工具的包,或者不被应用程序直接调用的包。
安装指令CMD下:npm install –g (包名) 本地模式去掉-g
卸载指令CMD下:npm uninstall –g (包名)
更新包指令: npm update –g (包名)
安装固定版本号:npm install (包名)@版本号 npm install sax@0.2.5
(3) 本地模式安装时,cd到你要安装的目录。
(4) 应用包时通过 var sax = require(‘sax’); 来加载。 Sax是包名。
2. 事件驱动编程(异步编程):是指程序执行流程取决于事件的编程风格。事件由事件处理程序或者事件回调函数进行处理。 当感兴趣的事件发生时,由系统调用函数来取代应用返回值的的编程风格就叫事件驱动编程。
3. Node每个模块都拥有一个上下文,将该模块和其他模块隔离开来,这意味着模块不会污染全局作用域,并且不会对其他模块造成干扰。(将代码拆分成一系列定义良好的模块,可以有效的控制代码。)
(1) 导出模块(本地模块)
function printA(){ console.log('A');}module.exports.printA = printA;
通过module.exports表示模块向需要它的脚本所导出的对象,它可以是任意对象。例如像上面那样导出一个函数。在test2.js使用这个模块时可以:
var mymodule2 = require('./test.js');mymodule2.printA(); //A
(2) 加载核心模块
一些以二进制形式发布的模块被称为核心模块。核心模块只能通过模块名引用,而不能通过文件路径引用。
Eg: var http = require('http');
(3) 加载文件模块
可以使用绝对路径,也可以使用相对路径。
(4) 加载文件夹模块
如此之后,Node就会在指定的文件夹下查找模块。Node会假定该文件夹是一个包,并试图查找包定义。包定义包含在名为package.json的文件中。如果文件夹中不存在包定义文件package.json ,就会假定为默认index.js
如果有package.json 就会在该文件中查找main属性
Eg: {
"name":"myModule",
"main":"./lib/myModule.js"
}
(5) 从node_modules文件夹加载
如果一个模块名既不是相对路径也不是核心模块,那么node就会尝试在当前目录下的node_modules文件夹中查找该模块。
(6) 模块的初始化过程只执行一次。
说明:Node取消了Javascript默认的全局名称空间,而是用CommonJS模块系统取而代之。
4. 缓冲区
为了方便处理二进制数据,引入缓冲区。
var buf =new Buffer("abcdef"); //可以加第二个可选参数 指定编码格式 默认是utf-8var buf2= new Buffer(1024); //创建长度为1024的缓冲区console.log(buf[1]); //获取缓冲区内容使用[] 可为其赋值console.log(buf2.length); //求其长度var smallerBuffer = buf.slice(2,4); //切分缓冲区buf2.copy(buf,0,2,4); //将buf第2到4的数据复制给buf2 从0开始的位置
说明:切分的缓冲区还是使用父缓冲区域内的内容。这些内容不会被垃圾机制回收。
5. 事件发射器模式。
(1)Node中很多对象都可以发射事件。(这些对象被称为事件发射器。可以将回调函数绑定到这些事件上,每当事件发射器发射事件时,对应的回调函数就会被调用。)
(2)可以通过伪类EventEmitter创建自定义的事件发射器。
说明:如果事件反复发生多次,那么这个时候使用回调模式就不行了。应该使用事件发射器模式。
一般而言,当需要再请求的操作完成后重新获取控制权时就使用CPS模式,如果事件可能发生多次就使用事件发射器模式。
(3)事件发射器模式会涉及两个或更多对象,这些对象包括事件发射器以及一个或多个事件监听器。(事件监听器则是绑定到事件发射器上的代码。)
(4) 发射的事件具有类型,类型用一个字符串表示。一旦相关事件发生,事件发射器就会调用相应的事件监听器,并将相关数据作为参数传递给事件监听器。
一般而言,应该总是监听错误事件,并对其进行恰当的处理。
(5) 创建事件发射器
var util= require('util');var EventEmitter = require('events').EventEmitter; var myClass = function(){};util.inherits(myClass,EventEmitter); //建立一条原型链,使myClass类实例能够使用EventEmitter类的原型方法myClass.prototype.someMethod= function(){ this.emit("custom","argument1", "argument2");};
<span style="font-family: Arial, Helvetica, sans-serif;">//当someMethod方法被调用时,就会发射一个名为custom的事件。该事件还可以发射若干数据例如argument1 它们将会作为</span>
// 参数传递给事件监听器//myClass类实例的客户端可以监听custom事件var myInstance =new myClass();myInstance.on('custom',function(str1, str2){ console.log('got a custom with the str1 %sand str2 %s!', str1, str2);});
Eg2:
var util= require('util');var EventEmitter = require('events').EventEmitter;var Ticker = function(){ var self = this; setInterval(function(){ self.emit('tick'); },1000);}; util.inherits(Ticker,EventEmitter);var ticker = new Ticker();ticker.on("tick",function(){ console.log("ticker");});
说明:.on 为指定类型的事件添加事件监听器。除此之外还有.once
.removeEventListent .remveAllEventListen
6. 使用定时器。
var time= 1000;
vartimeout = setTimeout(function(){
console.log("hello");
},time);
clearTimeout(timeout);
说明:clearTimeout()可以取消函数的执行。对应setInterval()的取消是clearInrerval()
(1) 使用process.nexTick(callback),回调函数会在事件队列内的所有事件处理完毕后立刻执行。
(2) Node和javascript运行时采用的是单线程事件循环。
- node.js(一)包管理、缓冲区、事件驱动、定时器
- Node.js事件驱动
- 《Node.js》包管理
- Node.Js Buffer类(缓冲区)-(一)
- node.js 之事件驱动
- Node.js[2] 事件驱动
- node.js的事件驱动
- Node.js事件驱动编程
- 【Node.js基础篇】(一)Hello World和事件驱动编程
- Node.js包的管理
- node.js 与 javascript (通过闭包)如何简化事件驱动编程风格
- node.js(二) 模块 事件驱动
- Node.js中的事件驱动编程详解
- 理解Node.js事件驱动编程
- 理解Node.js事件驱动编程
- 理解Node.js事件驱动编程
- node.js util全局变量 事件驱动events
- Node.js 事件驱动获取数据
- 图片合并 减少 http 请求
- eclise 部署web工程报 There are no resources that can be added or removed from the server.
- 编辑文章 - 博客频道 - CSDN.NET
- vmware 桌面虚拟化 horizon view 介绍
- 关于SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data错误的解决
- node.js(一)包管理、缓冲区、事件驱动、定时器
- 在uCGUI中添加汉字库
- 菜单项Menu学习
- asp.net中cookie和session的区别和相关使用
- 当glibc detected *** free(): invalid next size (normal)出现
- PHP学习笔记
- Java的异常大全
- Linux获取进程列表
- lwIP(V1.3.0)RAW_API译文