用node實現http服務器 三

    

     在前兩篇中,我們學習瞭如何用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的信號。

          

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章