Node.js入门教程 第二篇 (HelloWorld及事件分发)

createServer创建第一个Node.js程序


http模块的createServer函数实际调用V8引擎的C++库,对指定端口进行监听(socket)。当端口有连接访问时进行处理。

使用createServer函数搭建Node.js服务:

 var http = require('http');//引用http模块
 
 http.createServer(function (request, response) {
     response.writeHead(200, {'Content-Type': 'text/plain'});
     response.end('Hello World\n');
 }).listen(8080);//端口号

 

在浏览器中输入127.0.0.1:8080即可查看到Hello World。

此外, 代码中require用来引用模块。除了引用Node.js基础API模块,我们也可以自己定义模块并引用。具体,看后文Node.js的模块

 

EventEmitter(事件分发)


Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。Node.js 里面的许多对象都会分发事件。

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

EventEmitter 对象如果在实例化时发生错误,会触发 error 事件。当添加新的监听器时,newListener 事件会触发,当监听器被移除时,removeListener 事件被触发。

 var EventEmitter = require('events').EventEmitter; 
 var event = new EventEmitter(); 
 event.on('event_name', function() { 
     console.log('event_name事件触发'); 
 }); 
 setTimeout(function() { 
     event.emit('event_name'); 
 }, 1000);

 

执行结果:1s后输出“event_name事件触发”。

同一个事件对象可以添加多个监听者:

 var events = require('events'); 
 var emitter = new events.EventEmitter(); 
 emitter.on('someEvent', function(arg1, arg2) { 
     console.log('listener1', arg1, arg2); 
 }); 
 emitter.on('someEvent', function(arg1, arg2) { 
     console.log('listener2', arg1, arg2); 
 }); 
 emitter.emit('someEvent', 'arg1 参数', 'arg2 参数'); 

 

执行结果:

listener1 arg1 参数 arg2 参数

listener2 arg1 参数 arg2 参数

 

EventEmitter常用函数:

序号

方法 & 描述

1

addListener(event, listener)

为指定事件添加一个监听器到监听器数组的尾部。

2

on(event, listener)

为指定事件注册一个监听器,接受一个字符串 event 和一个回调函数。

server.on('connection', function (stream) {

console.log('someone connected!');

});

3

once(event, listener)

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

server.once('connection', function (stream) {

console.log('Ah, we have our first user!');

});

4

removeListener(event, listener)

移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器。

它接受两个参数,第一个是事件名称,第二个是回调函数名称。

var callback = function(stream) {

console.log('someone connected!');

};

server.on('connection', callback);

// ...

server.removeListener('connection', callback);

5

removeAllListeners([event])

移除所有事件的所有监听器, 如果指定事件,则移除指定事件的所有监听器。

6

setMaxListeners(n)

默认情况下, EventEmitters 如果你添加的监听器超过 10 个就会输出警告信息。 setMaxListeners 函数用于提高监听器的默认限制的数量。

7

listeners(event)

返回指定事件的监听器数组。

8

emit(event, [arg1], [arg2], [...])

按监听器的顺序执行执行每个监听器,如果事件有注册监听返回 true,否则返回 false。

 

 

Node.js的全局对象


JavaScript 中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可以在程序的任何地方访问,即全局变量。

在浏览器 JavaScript 中,通常 window 是全局对象, 而 Node.js 中的全局对象是 global,所有全局变量(除了 global 本身以外)都是 global 对象的属性。

在 Node.js 我们可以直接访问到 global 的属性,而不需要在应用中包含它。

 

Node.js中有不少常用的全局变量/函数,如:setTimeout,setInterval,console等。

 

我们也可以自定义全局变量/函数:

 //定义
 global.userName='Jimmy';
 //使用
 const name=global.userName;

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章