标签:
Node.js中全局对象是global,所有全局变量(除了global本身)都是global对象的属性。
global最根本的作用是作为全局变量的宿主。满足以下条件的变量是全局变量。
1.在最外层定义的变量
2.全局对象的属性
3.隐式定义的变量(未定义直接赋值的变量)
不可能在最外层定义变量,因为所有用户代码都是属于当前模块的,而模块本身不是最外层上下文。
用于描述当前node.js进程状况的对象。
process.argv:返回命令行脚本的各个参数组成的数组。
process.stdout:用来控制标准输出,也就是在命令行窗口向用户显示内容。它的write方法等同于console.log。
process.stdin:标准输入流,初始是被暂停的,要从标准输入读取数据,需要恢复流,并手动编写流的事件响应函数。
process.nextTick(callback):为事件循环设置一项任务,node.js会在下次事件循环相应时调用callback。
console.log():向标准输出流或标准错误流输出字符。
console.error():向标准错误流输出。
console.trace():向标准错误流输出当前的调用栈。
提供常用函数的集合。
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事件的对象设置监听器,避免遇到错误后整个程序崩溃。
是文件操作的封装、提供了文件的读取、写入、更名、删除、遍历目录、链接等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服务器
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