码迷,mamicode.com
首页 > 其他好文 > 详细

核心模块

时间:2015-02-10 07:03:08      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

全局对象

Node.js中全局对象是global,所有全局变量(除了global本身)都是global对象的属性。

global最根本的作用是作为全局变量的宿主。满足以下条件的变量是全局变量。

1.在最外层定义的变量

2.全局对象的属性

3.隐式定义的变量(未定义直接赋值的变量)

不可能在最外层定义变量,因为所有用户代码都是属于当前模块的,而模块本身不是最外层上下文。

 

process

用于描述当前node.js进程状况的对象。

process.argv:返回命令行脚本的各个参数组成的数组。

process.stdout:用来控制标准输出,也就是在命令行窗口向用户显示内容。它的write方法等同于console.log。

process.stdin:标准输入流,初始是被暂停的,要从标准输入读取数据,需要恢复流,并手动编写流的事件响应函数。

process.nextTick(callback):为事件循环设置一项任务,node.js会在下次事件循环相应时调用callback。

 

console

console.log():向标准输出流或标准错误流输出字符。

console.error():向标准错误流输出。

console.trace():向标准错误流输出当前的调用栈。

 

util

提供常用函数的集合。

 

util.inherits(constructor, superConstructor):通过构造函数,继承原型对象上的方法。构造函数的原型将被设置为一个新的 从超类创建的对象。

 

Sub只继承了Base在原型中定义的函数,同时在原型中定义的属性不会被console.log作为对象的属性输出

var util = require(‘util‘);

function Base() {
    this.name = ‘base‘;
    this.time = 1991;
    this.sayHello = function() {
        console.log(‘Hello‘ + this.name);
    };
}

Base.prototype.showName = function() {
    console.log(this.name);
};

function Sub() {
    this.name = ‘sub‘;
}

util.inherits(Sub,Base);

var objBase = new Base();
objBase.showName();           //base
objBase.sayHello();           //Hellobase
console.log(objBase);         //{ name: ‘base‘, time: 1991, sayHello: [Function] }

var objSub = new Sub();
objSub.showName();           //sub
console.log(objSub);         //{ name: ‘sub‘ }

 

util.inspect(object,[showHidden],[depth],[colors]):将任意对象转换为字符串,通常用于调试或错误输出。

showHidden:若为true,会输出更多隐藏信息

depth::最大递归的层数,默认递归2层

colors:若为true,输出格式会以ANSI颜色编码,通常用于在终端显示更漂亮的效果

var util = require(‘util‘);

function Person() {
    this.name = ‘nima‘;
    this.toString = function() {
        return this.name;
    }
}

var obj = new Person();
console.log(obj);                              //{ name: ‘nima‘, toString: [Function] }
console.log(util.inspect(obj));            //{ name: ‘nima‘, toString: [Function] }
console.log(util.inspect(obj,true));
/*
{ name: ‘nima‘,
  toString: 
   { [Function]
     [length]: 0,
     [name]: ‘‘,
     [arguments]: null,
     [caller]: null,
     [prototype]: { [constructor]: [Circular] } } }  */

 

 

 

events

events 模块只提供了一个对象: events.EventEmitter。EventEmitter 的核心就 是事件发射与事件监听器功能的封装。

EventEmitter 的每个事件由一个事件名和若干个参 数组成,事件名是一个字符串,通常表达一定的语义。对于每个事件,EventEmitter 支持 若干个事件监听器。

当事件发射时,注册到这个事件的事件监听器被依次调用,事件参数作 为回调函数参数传递。

 

 

EventEmitter常用的API

EventEmitter.on(event, listener)、emitter.addListener(event, listener) 为指定事件注册一个监听器,接受一个字符串event 和一个回调函数 listener。

EventEmitter.emit(event, [arg1], [arg2], [...]) 发射 event 事件,传递若干可选参数到事件监听器的参数表。

EventEmitter.once(event, listener) 为指定事件注册一个单次监听器,即监听器最多只会触发一次,触发后立刻解除该监听器。

EventEmitter.removeListener(event, listener) 移除指定事件的某个监听器,listener 必须是该事件已经注册过的监听器。

EventEmitter.removeAllListeners([event]) 移除所有事件的所有监听器, 如果指定 event,则移除指定事件的所有监听器。

 

error

EventEmitter 定义了一个特殊的事件 error,它包含了"错误"的语义,我们在遇到异常的时候通常会发射 error 事件。

当 error被发射时,EventEmitter规定如果没有响 应的监听器,Node.js 会把它当作异常,退出程序并打印调用栈。

我们一般要为会发射error事件的对象设置监听器,避免遇到错误后整个程序崩溃。

 

fs

是文件操作的封装、提供了文件的读取、写入、更名、删除、遍历目录、链接等POSIX文件系统操作。所有的操作都提供异步和同步版本。

fs.readFile(filename,[encoding],[callback(err,data)]):

encoding:字符编码,如果指定则data是一个解析后的字符串,否则data将会是以Buffer形式表示的二进制数据。

fs.open(path, flags,[mode], [callback(err, fd)])

flags:

r:读取模式

r+:读写模式

w:写入模式,如果文件不存在则创建

w+:读写模式,,如果文件不存在则创建

a:追加式,,如果文件不存在则创建

a+:读取追加模式,,如果文件不存在则创建

mode:创建文件时给文件制定权限,默认是0666.回调函数会传递一个文件描述符fd。HTTP服务器和客户端

 

HTTP服务器和客户端

HTTP服务器

 

var http = require(‘http‘);

http.createServer(function(req,res) {

    res.writeHead(200,{‘content-type‘ : ‘text/html‘});
    res.write(‘<h1>aaa</h1>‘);
    res.end(‘<p>hehe</p>‘);
}).listen(3000);

 

1.http.Server的事件

是一个基于事件的HTTP服务器,所有的请求都被封装为独立的事件,开发者只需对它的事件编写响应函数即可实现HTTP服务器的功能。

事件:

request:当客户端请求到来时,事件被触发,提供两个参数req和res,分别是http.ServerRequest和http.SsrverResponse的实例,表示请求和相应信息。

connection:当TCP连接建立时,该事件被触发,提供一个参数socket,为net.Socket的实例。

close:当服务器关闭时,该事件触发。

 

http.createServer([requestListener]):创建一个HTTP服务器并将requestListener作为request事件的监听函数。

显式的实现方法:

var server = new server ();

server.on(‘server‘,[requestListener] );

 

2.http.ServerRequest

HTTP请求的信息,一般由http.Server的request事件发送,作为第一个参数传递,简称request或req。

HTTP请求一般可以分为两部分:请求头(Request Header)和请求体(Request Body)。

事件:

data:当请求体数据到来时,该事件被触发。参数chunk表示接收到的数据。

end:请求数据体传输完成时,该事件被触发,此后不再有数据到来。

close:用户当前请求结束时,该事件被触发。

 

3.获取GET请求内容

由于GET请求直接被嵌入到路径,URL是完整的请求路径,包括了?后面的部分,因此可以手动解析后面的内容作为GET请求的参数。

var http = require(‘http‘);
var url = require(‘url‘);
var util = require(‘util‘);

http.createServer(function(req,res) {
    res.writeHead(200,{‘content-type‘ : ‘text/html‘});
    res.end(util.inspect(url.parse(req.url, true)));
}).listen(3000);

通过url.parse,原始的path被解析为对象,query就是GET请求的内容,路径是pathname。

 

4.获取POST请求内容

默认不会解析请求体

 

5.httpServerResponse

response.writeHead(statusCode, [headers]):向请求的客户端发送响应头。

response.write(data, [encoding]):向请求的客户端发送响应内容。

response.end([data], [encoding]):结束响应,当所有要返回的内容发送完毕,该函数必须被调用一次。

 

HTTP客户端

http.request(options, callback):发起HTTP请求。opitons:请求的参数

host:请求网站的域名或IP地址

port:请求网站的端口,默认80

method:请求方法,默认GET

path:请求的相对于根的路径,默认/。QueryString应包含在其中

headers:关联数组对象,为请求头的内容

 

http.get(options, callback):是http.request的简化版,唯一的区别是自动将请求方法设置为GET请求,不需要手动调用req.end()。

 

1.http.ClientRequest 由http.request或http.get返回产生的对象,表示一个已经产生而且正在进行的HTTP请求,提供一个response事件。

像http.ServerResponse一样提供了write和end函数,用于向服务器发送请求体,通常用于POST、PUT等操作。所有写结束后必须调用end函数通知服务器,否则请求无效。

request.abort():终止正在发送的请求。

request.setTimeout(timeout, [callback]):设置请求超时时间。

 

2.http.CientReponse:提供data、end、close事件。

response.setEncoding([encoding]):设置默认的编码,当dta事件被触发,数据会以encoding编码,默认为null。

response.pause():暂停接收数据和发送事件,方便实现下载。

response.resme():从暂停状态恢复。

核心模块

标签:

原文地址:http://www.cnblogs.com/surahe/p/4268864.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!