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;

 

 

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