Node.js - 06 URL 模組
JavaScript
URL 模組將網址分割為可讀的部分。
引入 URL 模組:
var url = require('url');
使用 url.parse() 方法解析網址,他將回傳一個 URL object,其中網址的每個部分都將會是屬性:
var url = require('url'); var adr = '<http://localhost:8080/default.html?year=2017&month=february>'; var q = url.parse(adr, true); console.log(q.host); //returns 'localhost:8080' console.log(q.pathname); //returns '/default.html' console.log(q.search); //returns '?year=2017&month=february' var qdata = q.query; //returns an object: { year: 2017, month: 'february' } console.log(qdata.month); //returns 'february'
Node.js File Server
現在我們知道如何解析查詢字串,並學會如何將 Node.js 當作 file server,我們將兩者結合,並提供客戶請求檔案。
建立兩個 html file,並保存在同一個資料夾當中
// summer.html <!DOCTYPE html> <html> <body> <h1>Summer</h1> <p>I love the sun!</p> </body> </html> // winter.html <!DOCTYPE html> <html> <body> <h1>Winter</h1> <p>I love the snow!</p> </body> </html>
接著建立 Node.js file demo_fileserver.js,他將處理文件請求,並回傳內容給客戶端。若出現任何問題,將拋出 404 錯誤。
var http = require('http'); var url = require('url'); var fs = require('fs'); http.createServer(function (req, res) { var q = url.parse(req.url, true); var filename = "." + q.pathname; fs.readFile(filename, function(err, data) { if (err) { res.writeHead(404, {'Content-Type': 'text/html'}); return res.end("404 Not Found"); } res.writeHead(200, {'Content-Type': 'text/html'}); res.write(data); return res.end(); }); }).listen(8080);
重新啟動伺服器:
$ node demo_fileserver.js
網址輸入 http://localhost:8080/ 應該會看到錯誤,因為沒有根目錄的檔案。
網址輸入 http://localhost:8080/summer.html 應該會看到:
網址輸入 http://localhost:8080/winter.html 應該會看到: