<node.js學習筆記(4)>stream和http模組

liangsheng0111發表於2018-12-12

1.stream流

獲取模組 const fs = require("fs")

  1. 讀取流 fs.createReadStream(a)
    引數a:讀取的檔案路徑,返回一個物件
    流有兩種狀態: 暫停和釋放

demo

const read = fs.createReadStream("./sjl.txt"); //讀取流
let str = "";
read.setEncoding("utf8"); //設定字符集
// read.resume(); 改變流的狀態為釋放狀態,讓它開始動起來  
//read中的內建事件
//設定流狀態為釋放狀態,回撥中的第一個形參為讀取的資料
read.on("data", (data) =>{
    str = data;
});
//流釋放完畢後,觸發end事件中的回撥
read.on("end", ()=>{
    console.log(str)
![](https://user-gold-cdn.xitu.io/2018/12/11/1679bfa086c05c90?w=280&h=51&f=png&s=9409)
    console.log("讀取結束");
})
複製程式碼

效果: 讀取sjl.txt中的內容

<node.js學習筆記(4)>stream和http模組

2.fs.appenfFile和fs.appendFileSync

前者通過非同步的方式將文字內容或資料新增到檔案裡,如果檔案不存在會自動建立。

fs.appendFile("./sjl2.txt", "sjl", "utf8", (err) => {
    console.log(err);
});
複製程式碼

後者通過同步的方式將文字內容或資料新增到檔案裡,檔案不存在則自動建立。

  1. 可寫流 fs.createWriteStream(a)
    引數a:寫入的檔案的路徑
const write = fs.createWriteStream("./sjl2.txt");
write.write("11111");
複製程式碼
//管道 pipe
const read = fs.createReadStream("./sjl.txt");
const write = fs.createWriteStream("./sjl2.txt");
read.pipe(write); //將sjl.txt的內容給予sjl2.txt,相當於複製檔案
複製程式碼
建立一個可讀流的建構函式
const Readable = require("stream").Readable;  //得到可讀流的建構函式/類
const read = new Readable(); //建立一個可讀流物件
read.setEncoding("utf8");
read.push("123");
read.push("456");
read.push("789");  //放資料
read.push(null); //資料放完了
read.on("data", data => {
    console.log(data);
});
複製程式碼

效果:
<node.js學習筆記(4)>stream和http模組

2.http

引入模組const http = require("http");

建立一個服務
const http = require("http");
//建立一個服務
const server = http.createServer((req, res)=>{
    /*
        1. req: 請求體物件
        2. res: 響應體物件,後臺給客戶端的響應
    */
    //設定響應頭(狀態碼,響應內容型別)
    res.writeHead(200, {
        "Content-Type" : "text/html;charset=utf-8"
    });
    //text/plain :純文字    text/html:標籤 
    res.write("返回的資料"); //向客戶端返回資料,可呼叫無數次
    res.end(""); //響應結束
    //write和end中引數必須是string或者Buffer物件
});
srever.listen(3000, ()=>{
    console.log("服務監聽在localhost 3000埠")
}); //監聽3000埠
複製程式碼
a) req中的一些屬性
const http = require("http"); 
//建立一個服務
const server = http.createServer((req, res) => {
    // req 請求體物件    res:響應體物件
    req.url;     //路由
    req.method;  //方法 "GET","POST"
    req.headers; //請求頭內容
});
//監聽埠號
server.listen(3000);
console.log("開始監聽3000埠"); 
複製程式碼
b) 通過不用路徑顯示不同的內容
const http = require("http");
//建立一個服務
const server = http.createServer((req, res) => {
    if (req.url !== "/favicon.ico") { //拒絕圖示請求
        if (req.method === "GET") { //設定方法
            res.writeHead(200, {
                "Content-Type": "text/html;charset=utf-8"
            });
            switch (req.url) {
                case "/sjl":
                    res.write("<div>sjl</div>");
                    break;
                case "/":
                    res.write("<div>根目錄</div>");
                    break;
                default:
                res.write("<div>沒有符合要求的</div>");
                    break;
            }
        }
    }

    res.end();
});
//監聽埠號
server.listen(3000);

複製程式碼

訪問localhost:3000 的效果圖:

<node.js學習筆記(4)>stream和http模組

<node.js學習筆記(4)>stream和http模組

c)通過不用路徑顯示不同的頁面

新建兩個html檔案 a.html和b.html

  1. 非同步寫法
const http = require("http");
const fs = require("fs");
//建立一個服務
const server = http.createServer((req, res) => {
        if (req.method === "GET") {
            res.writeHead(200, {
                "Content-Type": "text/html;charset=utf-8"
            });
            switch (req.url) {
                case "/sjl":
                    fs.readFile("./01.html", "utf8", (err, data) => {
                        res.write(data);
                        res.end();
                    }); 
                    break;
                default:
                    fs.readFile("./default.html", "utf8", (err, data) => {
                        res.write(data);
                        res.end();
                    }); 
                    break;
            }
        }
});
//監聽埠號
server.listen(3000);
console.log("開始監聽3000埠");
複製程式碼
  1. 同步寫法
const http = require("http");
const fs = require("fs");
const server = http.createServer((req, res) => {
        if (req.method === "GET") {
            res.writeHead(200, {
                "Content-Type": "text/html;charset=utf-8"
            });
            switch (req.url) {
                case "/sjl":
                    res.write(fs.readFileSync("./01.html", "utf8"));
                    break;
                default:
                    res.write(fs.readFileSync("./default.html", "utf8"));
                    break;
            }
        }
    res.end();
});
//監聽埠號
server.listen(3000);
console.log("開始監聽3000埠");
複製程式碼

效果圖:

<node.js學習筆記(4)>stream和http模組
<node.js學習筆記(4)>stream和http模組


d)ajax傳資料

建立一個html檔案

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ajax案例</title>
    <style>
        *{margin:0;padding:0;}
        li{list-style:none;}
        a{text-decoration: none;}
        #wrap{
            width:200px;
            height:200px;
            background-color:#f66;
        }
    </style>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
    <div id="wrap">ajax案例</div>
    <script>
        $("#wrap").click(() => {
            $.ajax({
                url : "http://127.0.0.1:3000",
                method : "get",
                success : function(msg){
                    console.log(msg);
                }
            });
        });
    </script>
</body>
</html>
複製程式碼

建立http服務,獲取資料

const http = require("http");
const server = http.createServer((req, res) => {
    //設定允許跨域,CROS跨域
    res.setHeader("access-control-allow-origin", "*");
    res.write("傳出的資料");
    console.log(15326235135);
    res.end();
});
server.listen(3000);
console.log("開始監聽3000埠");
複製程式碼

點選頁面時效果:

<node.js學習筆記(4)>stream和http模組

相關文章