iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
自我挑戰組

學習NodeJS的30天系列 第 13

Day13 NodeJS-Web Server II

  • 分享至 

  • xImage
  •  

接續前一天的內容,今天的重點在於提升靜態網頁讀取的效率與JSON格式檔案在Server中的傳遞。

以Stream執行處理請求與回應

Day12所提到的網頁讀取方式,是透過fs模組中的讀取檔案方法將html檔案讀取後再回應請求,這樣的流程在檔案較大或是多個使用者同時提出請求時,會導致等待存取時間較長、甚至塞車的狀況。透過Stream(串流)來讀取檔案的話,因為是持續以資料片段的方式讀取或寫入,可以避免等候過久。

實作看看

  1. 建立一個index.html網頁檔。
<html>
  <head></head>
  <body>
    <h1>Also an Example</h1>
    <p>To perform with stream.</p>
  </body>
</html>
  1. 在主程式中引入fshtml模組,並建立一個新的Server、指定監聽位址。
let html = require("html");
let fs = require("fs");

html.createServer(function(req, res){}).listen(1324, "127.0.0.1");
  1. 寫入Head資訊,以createReadStream()方法讀取網頁檔,再透過pipe()將資料片段轉傳至res串流。
html.createServer(function(req, res){
  res.writeHead(200, {"contentType": "text/html"});
  fs.createReadStream(`${__dirname}/index.html`).pipe(res);
}).listen(1324, "127.0.0.1");
  1. 執行程式並以瀏覽器連線監聽位址,一樣順利呈現網頁內容。

https://ithelp.ithome.com.tw/upload/images/20210928/20139980s7hcYkFZHD.png

JSON

JSON是一種資料交換格式,像物件一樣由屬性與值所組成且與JavaScript有很好的適用性,常用於API(Application Programming Interface)與網頁系統的資料傳遞,因此也是Server常會遇到需要處理的資料格式。

實作Server上的JSON傳遞

  1. 引用http模組,並建立新的Server、指定監聽位址。
let html = require("html");

html.createServer(function(req, res){}).listen(1324, "127.0.0.1");
  1. 建立一個新的物件obj
html.createServer(function(req, res){
  let obj = {
    firstName: "Chw",
    lastName: "K"
  }
}).listen(1324, "127.0.0.1");
  1. 設定res的Header以JSON為contentType,透過JSON.stringify()方法將obj序列化成JSON格式字串後設定為res傳送內容。
html.createServer(function(req, res){
  let obj = {
    firstName: "Chw",
    lastName: "K"
  }
  
  res.writeHead(200, {"contentType": "application/json"});
  res.end(JSON.stringify(obj));
}).listen(1324, "127.0.0.1");
  1. 執行程式以瀏覽器確認傳送內容,顯示JSON格式資料,若後續以JavaScript介接,可將JSON反序列化為物件以取用屬性內容。

https://ithelp.ithome.com.tw/upload/images/20210928/20139980EA1TPSmiKy.png

小結

透過串流的方式執行網頁資料的傳遞,除了避免等候載入之外,在程式碼上也比較簡潔,而JSON格式的資料傳遞在與後端API工具的連結與應用上也相當實用,例如API從資料庫查找資料的傳遞等。

關於NodeJS比較基本的使用和練習在這部份告一段落,接下來要進入的部份是強大的套件管理系統NPM,敬請期待~

參考資料

https://zh.wikipedia.org/wiki/JSON

Learn and Understand NodeJS [課程]


上一篇
Day12 NodeJS-Web Server I
下一篇
Day14 NodeJS-NPM I
系列文
學習NodeJS的30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言