1. 程式人生 > >node中的常用核心模組及方法

node中的常用核心模組及方法

 



常用的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/list
req.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);