用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的信号。

          

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