events
事件
又稱為發(fā)布訂閱模式
又稱為觀察者模式
當主題對象發(fā)生變化時,會通知所有的觀察者對象,更新自己的行動
獲取時間模塊
var events = require("events");
注冊事件
// 方法1
newDad.addListener("lee",test1);
// 方法2
newDad.on("lee",test2)
// 綁定一次的事件
newDad.once("le",test1);
發(fā)射事件
// 當用addListener或者on綁定事件的時候,同一個事件可以發(fā)射多次
newDad.emit("lee");
newDad.emit("lee");
// 但當用once綁定的事件時,無論發(fā)射幾次該事件,只會執(zhí)行一次
newDad.emit("le");
newDad.emit("le");
刪除事件
// 刪除綁定的事件
newDad.removeListener("lee",test1);
// 刪除所有的事件,既然是刪除所有事件,里面就不需要加參數(shù)
newDad.removeAllListeners();
buffer
buffer:緩存區(qū),暫時存放在內存里的一段數(shù)據(jù)。JS語言自身只有字符串類型,沒有二進制數(shù)據(jù)類型,在處理文件流時,必須使用到二進制數(shù)據(jù),因此在Node.js中,定義一個buffer類,該類用來創(chuàng)建一個專門存放二進制數(shù)據(jù)緩存區(qū)
buffer有一個八位字節(jié)一個字節(jié)元素組成的數(shù)組,單位用16進制表示,取值范圍0-255
創(chuàng)建buffer對象
//創(chuàng)建方式1 隨機創(chuàng)建1個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 通過字符串創(chuàng)建
var buffer = new Buffer("大家好");
console.log(buffer);
//toString() 將buffer格式轉化為中文
console.log(buffer.toString());
//通過數(shù)組創(chuàng)建buffer
var buffer = new Buffer([0xe5,0xa4,0xa7,0xe5,0xae,0xb6,0xe5,0xa5,0xbd]);
//打印出來的buffer 會自動將0x 去掉
console.log(buffer);
console.log(buffer.toString());
path
normalize:規(guī)范化字符串路徑
var path = require("path");
// ./ 是同級 ../ 是上一級
//index.php 前面有一個 ../ 會網上跳一級,所以跳過test1直接到test
var urlPath = "././////test/test1/../index.php";
var newPath = path.normalize(urlPath);
console.log(newPath);
join 將多個參數(shù)值字符串結合成一個路徑字符串
var newPath1 = path.join(__dirname,"test","test1/mycode","index.php");
console.log(newPath1);
resolve:把參數(shù)解析為一個絕對路徑
1.以應用程序的根目錄為起點,根據(jù)參數(shù)的值解析出一個絕對路徑
- .當前目錄 ..上級目錄
- 普通字符串代表下一級目錄
- 如果沒有下一個參數(shù),返回當前路徑
- /代表盤符的根目錄
var urlPath1 = "test/test1/test.php";
var newPath2 = path.resolve(urlPath1);
console.log(newPath2);
http
http:超文本傳輸協(xié)議,是互聯(lián)網使用最廣的一個協(xié)議.HTTP模塊主要用于搭建HTTP服務器和客戶端,使用HTTP服務器或客戶端功能必須帶哦用HTTP模塊
var http = require(“http”);var url = require(“url”);//創(chuàng)建服務器//http繼承自tcpvar server = http.createServer(function (req,res) { var urlstr = req.url;//獲取請求的路徑 var urlMethod = req.method;//獲取請求的方法 //console.log(urlMethod);
res.end(“hello”);});
server.listen(8080);
HTTP模擬客戶端
//nodejs的服務端
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);
//通過nodejs模擬客戶端 客戶端請求服務端
var http = require("http");
var options = {
method:"post",
host:"localhost",
port:8989,
path:"/"
};
/** request :發(fā)請求
* http.request() 返回一個 http.ClientRequest類的實例。
* ClientRequest實例是一個可寫流對象。
* 如果需要用POST請求上傳一個文件的話,
* 就將其寫入到ClientRequest對象
**/
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();