iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
Modern Web

Node.js 非專業解說系列 第 12

DAY12 : HTTP前情提要

  • 分享至 

  • xImage
  •  

在實作的過程中,原本想把這篇省略掉,但在往後的實作中,偶而會利用到這些模塊與知識,放在這篇,之後文中若有提到的話,就可以大概知道這些是甚麼,在Node中扮演什麼地位,而這篇只是我的重點整理,所以可能沒有敘述的這麼詳細或是準確,請多多包涵!若有敘述錯誤的地方在請指教。

Buffer:

Buffer就是一個緩衝區,當前端將數據流(Stream)發送到後端時,會被分割成好幾等分,Nodejs會有這個緩衝區用來儲存這些被分割的數據,它可以控制Stream的流速。
Stream傳到後端的速度比程序讀取的速度還來的快時,還沒讀取或來不及讀取的Stream,就會先暫存在Buffer;
Stream到後端的速度比程序讀取慢時,也會暫存在緩衝區等達到一定的量之後再給程序讀取
通常用陣列來儲存,在某些時候也可以限制緩衝區的大小。
Buffer是用來處理二進位的數據,是Node特別設置。Node有String之外還有Buffer這類的數據,是因為它在進行Web開發時常需要與前端數據通信,二進為數據是很常見的,所以Buffer處理完二進位的數據後,所表現出來的是十六進位的字串

//Buffer讀取
var fs=require("fs");
fs.readFile("butterfly.txt",(err,result)=>
{
console.log(result);
});

執行結果:
https://ithelp.ithome.com.tw/upload/images/20210923/20140244Z42gytt8Cu.png

就是文字由二進位又被Buffer轉換成十六進位,其中應該也是因為二進位太難了,
讀取時又臭又長的,改成十六進位是不是明瞭許多。

readFile:

  • 異步讀取文件。
  • 適用體積小的文件,若大容量的文件請使用stream。
  • 若不指定encodin配置,會出現Buffer格式的字符串。
  • 可透過encodingtoStrin轉換成文字。
//readFile異步讀取
var fs=require("fs");
var data=fs.readFileSync("butterfly.txt",{encoding:"UTF-8"});
console.log(data);

執行結果:
https://ithelp.ithome.com.tw/upload/images/20210923/20140244vF0koJC6vv.png

與butterfly.txt內容是相符的!
若是沒有設定encoding,會輸出Buffer的格式!! 所以可以透過tostring作轉換!

//readFile 異步讀取/文字傳換
var fs=require("fs");
var data=fs.readFileSync("butterfly.txt");
var data = data.toString('UTF-8',0,100);
console.log(data);

toString(encoding,start,end)
如此一來,也可以轉換成文字!但當然會選擇第一個直接設置encoding更方便一點!

stat:

  • 獲得文件狀態(存在或不存在)
  • 在調用write()open()read()前可以先調用stat方法,來判斷文件狀態。
//stat判斷文件是否存在 
var fs=require("fs");
fs.stat("butterfly.txt",(err,result)=>
{ //假設不存在的檔案為butter.txt
    if(err)
    {
        console.log("error!!!");
        console.log(err);
    }
    console.log(result);
});

當文件是不存在時(butter.txt),
執行結果:

https://ithelp.ithome.com.tw/upload/images/20210923/20140244xsfZBvqVDb.png

當文件存在時,
執行結果:
https://ithelp.ithome.com.tw/upload/images/20210923/20140244mlQuCtdwHP.jpg

處理HTTP請求:

首先要獲取請求的URL、method之類的訊息,這些訊息都封裝在require中。

  • Method最常見的關鍵字就getpost
  • URL則是去掉網站伺服器網址外的值,
    像是http://example.com/index.html?name=Lear ,那麼它的URL值就是index.html?name=Lear

可以在Google中,按[右鍵]->[檢查]->[Network],接著在網址處輸入goole.com,按下[Enter]的當下,就會出現以下畫面:
https://ithelp.ithome.com.tw/upload/images/20210923/20140244WSJ34XKOMv.png

在[Headers]中可以看到各類的請求與響應頭和請求頭。
通常GET請求是從後端服務器裡獲取數據。
而在[Response]中顯示的就是HTML的原始碼。


上一篇
DAY11: Node基礎總整理
下一篇
Day13: HTTP服務器
系列文
Node.js 非專業解說30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言