events
事件
又稱為發(fā)布訂閱模式
又稱為觀察者模式
當(dāng)主題對(duì)象發(fā)生變化時(shí),會(huì)通知所有的觀察者對(duì)象,更新自己的行動(dòng)
獲取時(shí)間模塊
var events = require("events");
注冊(cè)事件
// 方法1
newDad.addListener("lee",test1);
// 方法2
newDad.on("lee",test2)
// 綁定一次的事件
newDad.once("le",test1);
發(fā)射事件
// 當(dāng)用addListener或者on綁定事件的時(shí)候跺涤,同一個(gè)事件可以發(fā)射多次
newDad.emit("lee");
newDad.emit("lee");
// 但當(dāng)用once綁定的事件時(shí)贤壁,無(wú)論發(fā)射幾次該事件高镐,只會(huì)執(zhí)行一次
newDad.emit("le");
newDad.emit("le");
刪除事件
// 刪除綁定的事件
newDad.removeListener("lee",test1);
// 刪除所有的事件目养,既然是刪除所有事件,里面就不需要加參數(shù)
newDad.removeAllListeners()财异;
buffer
buffer:緩存區(qū)倘零,暫時(shí)存放在內(nèi)存里的一段數(shù)據(jù)。JS語(yǔ)言自身只有字符串類型宝当,沒(méi)有二進(jìn)制數(shù)據(jù)類型视事,在處理文件流時(shí),必須使用到二進(jìn)制數(shù)據(jù)庆揩,因此在Node.js中俐东,定義一個(gè)buffer類,該類用來(lái)創(chuàng)建一個(gè)專門存放二進(jìn)制數(shù)據(jù)緩存區(qū)
buffer有一個(gè)八位字節(jié)一個(gè)字節(jié)元素組成的數(shù)組订晌,單位用16進(jìn)制表示虏辫,取值范圍0-255
創(chuàng)建buffer對(duì)象
//創(chuàng)建方式1 隨機(jī)創(chuàng)建1個(gè)buffer
var buffer = new Buffer(10);
console.log(buffer);
//更改buffer,參數(shù)1 更改的數(shù) 參數(shù)2:從什么位置更該锈拨,參數(shù)3砌庄,更改到什么位置
buffer.fill(255,2);
console.log(buffer);
buffer.fill(255,2,4);
console.log(buffer);
//創(chuàng)建方式2 通過(guò)字符串創(chuàng)建
var buffer = new Buffer("大家好");
console.log(buffer);
//toString() 將buffer格式轉(zhuǎn)化為中文
console.log(buffer.toString());
//通過(guò)數(shù)組創(chuàng)建buffer
var buffer = new Buffer([0xe5,0xa4,0xa7,0xe5,0xae,0xb6,0xe5,0xa5,0xbd]);
//打印出來(lái)的buffer 會(huì)自動(dòng)將0x 去掉
console.log(buffer);
console.log(buffer.toString());
path
normalize:規(guī)范化字符串路徑
var path = require("path");
// ./ 是同級(jí) ../ 是上一級(jí)
//index.php 前面有一個(gè) ../ 會(huì)網(wǎng)上跳一級(jí),所以跳過(guò)test1直接到test
var urlPath = "././////test/test1/../index.php";
var newPath = path.normalize(urlPath);
console.log(newPath);
join 將多個(gè)參數(shù)值字符串結(jié)合成一個(gè)路徑字符串
var newPath1 = path.join(__dirname,"test","test1/mycode","index.php");
console.log(newPath1);
resolve:把參數(shù)解析為一個(gè)絕對(duì)路徑
1.以應(yīng)用程序的根目錄為起點(diǎn),根據(jù)參數(shù)的值解析出一個(gè)絕對(duì)路徑
- .當(dāng)前目錄 ..上級(jí)目錄
- 普通字符串代表下一級(jí)目錄
- 如果沒(méi)有下一個(gè)參數(shù),返回當(dāng)前路徑
- /代表盤符的根目錄
var urlPath1 = "test/test1/test.php";
var newPath2 = path.resolve(urlPath1);
console.log(newPath2);
http
http:超文本傳輸協(xié)議,是互聯(lián)網(wǎng)使用最廣的一個(gè)協(xié)議.HTTP模塊主要用于搭建HTTP服務(wù)器和客戶端奕枢,使用HTTP服務(wù)器或客戶端功能必須帶哦用HTTP模塊
var http = require(“http”);var url = require(“url”);//創(chuàng)建服務(wù)器//http繼承自tcpvar server = http.createServer(function (req,res) { var urlstr = req.url;//獲取請(qǐng)求的路徑 var urlMethod = req.method;//獲取請(qǐng)求的方法 //console.log(urlMethod);
res.end(“hello”);});
server.listen(8080);
HTTP模擬客戶端
//nodejs的服務(wù)端
var http = require("http");
var server = http.createServer(function (req,res) {
var str = "";
req.on("data",function (chunk) {
str += chunk;
})
req.on("end",function () {
console.log(str);
})
var obj = {
name:"dr",
age:19
}
res.write(JSON.stringify(obj));
res.end();
})
server.listen(8989);
//通過(guò)nodejs模擬客戶端 客戶端請(qǐng)求服務(wù)端
var http = require("http");
var options = {
method:"post",
host:"localhost",
port:8989,
path:"/"
};
/** request :發(fā)請(qǐng)求
* http.request() 返回一個(gè) http.ClientRequest類的實(shí)例娄昆。
* ClientRequest實(shí)例是一個(gè)可寫流對(duì)象。
* 如果需要用POST請(qǐng)求上傳一個(gè)文件的話缝彬,
* 就將其寫入到ClientRequest對(duì)象
**/
var request = http.request(options,function (res) {
var str = "";
res.on("data",function (chunk) {
str += chunk;
})
res.on("end",function () {
console.log(str);
})
})
var obj = {
name:"RR",
age:188
}
request.write(JSON.stringify(obj));
request.end();