在前兩篇中,我們學習瞭如何用node實現http服務器的基礎創建方法。現在我們來說一下如何通過判斷url來知道客戶端所請求的資源。
我們首先來看下使用url包中parse返回來的是一個什麼樣子的值:
var http = require("http");
var url =require("url"); //引入url模塊
var server = http.createServer(function (request,respnse) {
var urlObj = url.parse(request.url);
console.log(urlObj);
respnse.end('url parse');
});
server.listen(8080);
運行之後,在瀏覽器起重發起請求,
在服務器控制檯中則出現console的打印。
當我們瀏覽器請求的網址變成這樣時 http://localhost:8080/quenry.html?abc=xyz
則打印的log就出現一些不同(紅框部分則體現了url請求的內容):
上圖返回的值中,query表示請求的參數;pathname表示請求的資源。
那下面我們就用上面的url返回的內容來進行一些比較複雜的操作。
在寫服務器代碼時,我們首先來進行一些準備:
寫兩個用來測試的html文件
1:index.html
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1 style="background: cornflowerblue">
hello World!!<br>
這個是讀取index.html文件顯示出來的
</h1>
</body>
</html>
2:query.html
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1 style="background: cornflowerblue">
hello World!!<br>
這個是讀取query.html文件顯示出來的
</h1>
</body>
</html>
var http = require("http");//引入http模塊
var url =require("url"); //引入url模塊
var fs = require("fs");//引入fs模塊
var server = http.createServer(function (request,respnse) {
var urlObj = url.parse(request.url);
console.log(urlObj);
var query = urlObj.query;
var pathName = urlObj.pathname;
if(pathName = "/"){//當請求的網址爲默認網址時
readFileAndResponse('/index.html',response)
}
else if(pathName === "/ajax"){//當請求的是一個Jason文件時,則返回一段Jason數據
response.end({"msg":"This is a json response."});
}else{
readFileAndResponse(pathName,response);
}
respnse.end('url parse');
});
function readFileAndResponse(path,response){
fs.readFile(path,'utf-8',function(err,data){
if(err){//當url想要請求的文件不存在的時候
response.writeHead(404);//對response的首部寫入狀態碼。如404等。404代碼所請求的鏈接不存在
response.end("File is not exist");
}else{//URL請求的文件存在
response.end(data);
}
});
}
server.listen(8080);
下面我們就這上面代碼的集中實現形式來進行測試:
1:請求默認網頁
2:請求一個存在的網頁
3:請求一個ajax
4:請求一個不存在的頁面,返回一個404的信號。