node中的常用核心模組及方法
阿新 • • 發佈:2018-12-30
常用的5個核心模組
http url querystring fs events
1. http
http.createServer 建立伺服器, 回撥函式中有2個引數 1、req:request() 請求,只能在服務端看到 2、res:response() 給客戶端的回覆,在客戶端看到 req引數: req.url 獲取請求的地址 eg:http://www.baidu.com/api/list?a=23&b=f,則req.url為/api/listreq.method 請求的方式get/post res引數: res.end 結束回覆 ,向客戶端傳送最後一次資訊(必須的,否則伺服器就會一直執行) res.statusCode 設定狀態碼 該屬性控制響應頭重新整理時將被髮送到客戶端的狀態碼。 res.write() 回覆內容 res.writeHead() 設定狀態碼和返回檔案的型別 res.setHeader() 設定返回檔案的型別 http.get(url,(res)=>{})//請求資料 參1:請求的地址,不能以https開頭 參2:回撥函式,引數為responose res.statusCode獲取伺服器響應的狀態碼,200代表成功 res.on("data",(data)=>{ }) res.on("end",()=>{})
建立伺服器
//引入核心模組http const http = require('http'); //建立伺服器 http.createServer((req,res)=>{ //設定請求成功的狀態碼,型別,charset=utf8解決亂碼問題 res.writeHead(200,{"content-type":"text/plain;charset=utf8"}); //向客戶端傳送最後一次資訊(必須的,否則伺服器就會一直執行) res.end("還好"); }).listen("3000")//設定埠號 最簡單的伺服器,在終端執行js檔案(node 檔名),在瀏覽器中輸入localhost 埠號,即可
請求資料
const http = require("http"); const cheerio = require("cheerio"); const fs = require("fs"); //http.get()不能請求以https://開頭的路徑 http.get("http://www.mobiletrain.org/?pinzhuanbdtg=biaoti", (res) => { //判斷是否請求成功(res.statusCode獲取響應的狀態碼,200代表成功) if (res.statusCode == 200) { let str = ""; //當獲取到資料的時候會對資料進行一塊一塊的接收 res.on()為繫結事件的方法 data是事件,回撥函式中的data為接收到的每塊的資料 res.on("data", (data) => { str += data; }) //end為事件,res 是個writable的流,當writable流接收到 null 的時候會觸發 end 事件即給客戶端的東西寫完了,可以傳送給客戶端了 res.on("end", () => { //將字串載入到$符號中這樣就可以用來操作元素 let $ = cheerio.load(str); let list = $(".ul1").children(); let data = ""; for (var i = 0; i < list.length; i++) { data += list.eq(i).find("span").text() + "\n"; } fs.writeFile("./data.txt", data, () => {}) }) } })
2 url u
rl.parse() 將一個url轉換成一個urlObject 參1:url 引數2:是一個布林值 如果填true的話,會將query字串解析成query物件 位址列中?後面的部分是query的部分 url.format() 將一個url Objet轉換一個url url.resolve() 生成一個相對路徑或者絕對路徑 console.log(url.resolve("/a/b/c","/d"))//絕對路徑 將所有的都替替換,結果為:/d console.log(url.resolve("/a/b/c","d"))//生成相對路徑 只將最後一個替換,結果為:/a/b/d
3 querystring
querystring.parse() 將字串轉換為物件 引數1 字串 引數2 分割符 引數3 賦值符 querystring.stringify() 將物件轉換成字串(是轉義後的字串,需要進行反轉義) 引數1 物件 引數2 分割符 引數3 賦值符 querystring.escape()轉義 name = a=b=c key val name=a=b = c key val querystring.unescape() 反轉義 eg: const querystring = require("querystring"); let str = "name+李想*age+18*sex+美女"; let obj = querystring.parse(str,"*","+"); //console.log(querystring.stringify(obj,"%","$")) let str1 = "a=b=c"; let val = querystring.escape(str1); let key = "name="+val; console.log(querystring.unescape(val))
4 fs {讀取到的檔案預設是buffer型別)
const fs = require("fs"); stat:檢查檔案的型別 fs.stat("./002url.js",(err,starts)=>{ starts.isFile()//判斷當前檔案是否是一個檔案 starts.isDirectory():判斷當前檔案是不是一個目錄 }) ----------------------------- eg: fs.stat("./002url.js",(err,starts)=>{ console.log(starts.isFile()) console.log(starts.isDirectory()) }) ------------------------------------------------ fs.mkdir();建立資料夾 引數1:檔案路徑 引數2:回撥 ----------------- eg: fs.mkdir("./abc",(err)=>{}) fs.mkdirSync() 同步 -------------------------------------------------------- fs.writeFile(); 建立並寫入檔案 引數1:檔案路徑 引數2:寫入檔案的內容 引數3 回撥() fs.writeFile("./abc/data.txt","1234",()=>{}) ---------------------------------- fs.readFile() 引數1:檔案路徑 引數2:回撥 有兩個引數,err data fs.readFile("./abc/data.txt",(err,data)=>{ console.log(data+""); }) Sync:同步 //console.log("1111") //讀取到的檔案預設是buffer型別 ------------------------------------------------ fs.rename() 重新命名 fs.rename("./data.txt","./page.txt",(err)=>{}) --------------------------------------------------------- fs.readdir():列出檔案的目錄 引數1:檔案路徑 引數2:回撥函式 err list fs.readdir("../demo",(err,list)=>{ console.log(list) })
5 events
//引入了核心模組 const EventEmitter = require("events"); //繼承了EventEmitter當前類的屬性和方法 class MyEmitter extends EventEmitter{}; //例項化 const myEmitter = new MyEmitter(); on:繫結事件 引數1:事件名稱 引數2:回撥函式(事件對應的函式) emit:觸發事件及事件對應的方法 引數1:事件名稱(要和on繫結的事件一致) 引數2:需要傳遞的引數 once:繫結事件,但僅能觸發一次方法 removeListener() 解除繫結 引數1:事件名稱 引數2:解綁的函式 removeAllListeners()解綁全部 引數1:事件名稱 --------------------------------------------------------- eg: //引入了核心模組 const EventEmitter = require("events"); //繼承了EventEmitter當前類的屬性和方法 class MyEmitter extends EventEmitter{}; //例項化 const myEmitter = new MyEmitter(); function fn(val){ console.log("李"+val); } function fn1(val){ console.log("朱"+val); } function fn2(val){ console.log("程"+val); } myEmitter.on("change",fn); myEmitter.on("change",fn1); //把當前事件放在佇列的最前面優先執行 myEmitter.prependListener("change", fn2);