在前两篇中,我们学习了如何用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的信号。