Node.js - 04 HTTP 模組
JavaScript
Node.js 有一個內建的模組 “HTTP”,他允許 Node.js 透過 Hyper Text Transfer Protocol 傳輸資料。
可以這樣引入 HTTP 模組:
var http = require('http')
Node.js 作為 Web Server
HTTP 模組可以建立一個 HTTP Server 用來監聽 server ports,並向客戶端回應。
使用 createServer() 建立 HTTP server:
var http = require("http"); http .createServer(function (req, res) { res.write("Hello World"); res.end(); }) .listen(8080);
當有人嘗試連接 port 8080 時,將執行 http.createServer()。
儲存為 “demo_http.js” 並執行他。
$ node demo_http.js
新增 HTTP Header
如果來自 HTTP server 的回應顯示為 HTML,則應該要包含正確內容類型的 HTTP header。
var http = require("http"); http .createServer(function (req, res) { res.writeHead(200, { "Content-Type": "text/html" }); // add res.write("Hello World"); res.end(); }) .listen(8080);
res.writeHead() 的第一個參數為 http 狀態碼,200 表示一切正常,第二個參數為 response headers (回應標頭)。
讀取查詢字串
http.createServer() 有一個參數 req ,將來自客戶端的請求表示為物件( http.IncomingMessage object )。
req 有一個 url 屬性,他保存網域後面 url 的部分。
var http = require("http"); http .createServer(function (req, res) { res.writeHead(200, { "Content-Type": "text/html" }); res.write(req.url); // edit this line res.end(); }) .listen(8080);
記得 ctrl + c 結束伺服器,重新開啟。
$ node demo_http.js
網址輸入http://localhost:8080/summer,應該會看到
分割查詢字串
有一個內建模組可以輕鬆地分割查詢字串。 URL module
將程式碼修改為:
var http = require("http"); var url = require("url"); http .createServer(function (req, res) { res.writeHead(200, { "Content-Type": "text/html" }); var q = url.parse(req.url, true).query; var txt = q.year + " " + q.month; res.end(txt); }) .listen(8080);
重新開啟伺服器,輸入網址 http://localhost:8080/?year=2017&month=July,應該會看到