Http模塊
Http模塊主要用于搭建HTTP服務。
實例:
var http = require('http');
http.createServer(function (request, response) {
// 發送 HTTP 頭部
// HTTP 狀態值: 200 : OK
// 內容類型: text/plain
response.writeHead(200, {'Content-Type': 'text/plain'});
// 發送響應數據 "Hello World"
response.end('Hello World\n');
}).listen(8888);
// 終端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');
- 上面代碼第一行var http = require("http"),表示加載http模塊
- 調用http模塊的createServer方法,創造一個服務器實例
- request方法用于發出HTTP請求
- response.writeHead方法表示,服務器端回應一個HTTP頭信息
- response.end方法表示,服務器端回應的具體內容,以及回應完成后關閉本次對話
- listen方法用于啟動服務器監聽指定端口
fs模塊
fs是filesystem的縮寫,該模塊提供本地文件的讀寫能力
Node 導入文件系統模塊(fs)語法如下所示:
var fs = require("fs")
readFile方法用于異步讀取數據。
實例
創建 input.txt 文件,內容如下:
菜鳥教程官網地址:www.runoob.com
文件讀取實例
創建 file.js 文件, 代碼如下:
var fs = require("fs");
// 異步讀取
fs.readFile('input.txt', function (err, data) {
if (err) {
return console.error(err);
}
console.log("異步讀取: " + data.toString());
});
writeFile方法用于異步寫入文件。
語法
以下為異步模式下寫入文件的語法格式:
fs.writeFile(file, data[, options], callback)
<i>注:如果文件存在,該方法寫入的內容會覆蓋舊的文件內容。</i>
參數
參數使用說明如下:
file - 文件名或文件描述符。
data - 要寫入文件的數據,可以是 String(字符串) 或 Buffer(流) 對象。
options - 該參數是一個對象,包含 {encoding, mode, flag}。默認編碼為 utf8, 模式為 0666 , flag 為 'w'
callback - 回調函數,回調函數只包含錯誤信息參數(err),在寫入失敗時返回。
實例
接下來我們創建 file.js 文件,代碼如下所示:
var fs = require("fs");
console.log("準備寫入文件");
fs.writeFile('input.txt', '我是通過寫入的文件內容!', function(err) {
if (err) {
return console.error(err);
}
console.log("數據寫入成功!");
});
以上代碼執行結果如下:
<blockquote>
$ node file.js
準備寫入文件
數據寫入成功!
</blockquote>
events 模塊
Node 的大部分核心事件API 都是異步事件驅動的。為此需要一個監聽異步的操作來了解情況。為此events 模塊就誕生了,可以監聽I/O的情況
我們可以通過引入 events 模塊,并通過實例化 EventEmitter 類來綁定和監聽事件,如下實例:
// 引入 events 模塊
var events = require('events');
// 創建 eventEmitter 對象
var eventEmitter = new events.EventEmitter();
EventEmitter實例可以使用on 或addListener 監聽事件,emit 方法觸發事件,removeListener方法移除事件綁定,listenerCount方法求監聽器個數
//綁定事件處理程序:
eventEmitter.on('eventName', eventHandler);
或
eventEmitter.addListener('eventName',eventHandler);
//觸發事件:
eventEmitter.emit('eventName');
//移除事件綁定
eventEmitter.removeListener('connection', listener1);
//返回監聽事件個數
EventEmitter.listenerCount(eventEmitter,'connection');
實例
創建 main.js 文件,代碼如下所示:
// 引入 events 模塊
var events = require('events');
// 創建 eventEmitter 對象
var eventEmitter = new events.EventEmitter();
// 創建事件處理程序
var connectHandler = function connected() { console.log('連接成功。');
// 觸發 data_received 事件
eventEmitter.emit('data_received');}
// 綁定 connection 事件處理程序
eventEmitter.on('connection', connectHandler);
// 使用匿名函數綁定 data_received 事件
eventEmitter.on('data_received', function(){ console.log('數據接收成功。');});
// 觸發 connection 事件
eventEmitter.emit('connection');console.log("程序執行完畢。");
接下來讓我們執行以上代碼:
<blockquote>
$ node main.js
連接成功。
數據接收成功。
程序執行完畢。
</blockquote>
var events = require('events');
var eventEmitter = new events.EventEmitter();
// 監聽器 #1
var listener1 = function listener1() {
console.log('監聽器 listener1 執行。');
}
// 監聽器 #2
var listener2 = function listener2() {
console.log('監聽器 listener2 執行。');
}
// 綁定 connection 事件,處理函數為 listener1
eventEmitter.addListener('connection', listener1);
// 綁定 connection 事件,處理函數為 listener2
eventEmitter.on('connection', listener2);
var eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection');
console.log(eventListeners + " 個監聽器監聽連接事件。");
// 處理 connection 事件
eventEmitter.emit('connection');
// 移除監綁定的 listener1 函數
eventEmitter.removeListener('connection', listener1);
console.log("listener1 不再受監聽。");
// 觸發連接事件
eventEmitter.emit('connection');
eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection');
console.log(eventListeners + " 個監聽器監聽連接事件。");
console.log("程序執行完畢。");
接下來讓我們執行以上代碼:
<blockquote>
$ node main.js
2 個監聽器監聽連接事件。
監聽器 listener1 執行。
監聽器 listener2 執行。
listener1 不再受監聽。
監聽器 listener2 執行。
1 個監聽器監聽連接事件。
程序執行完畢。
</blockquote>