如果一个URL比较完整,包括querystring部分(就是GET请求查询字符串部分),hash部分:
此时req.url是:
b.html?id=123
也就是说,querystring属于req.url,但是hash不属于.
但是我们此时要得到文件名部分,我不想要querystring,此时可以用正则提炼,太麻烦.
此时Node中提供了内置模块:url,path,querystring,他们都可以服务于URL的识别
代码如下:
var http=require("http");
var fs=require("fs");
var url=require("url");
var path=require("path");
var querystring=require("querystring");
var server=http.createServer((req,res)=> {
//统一设置一下header
res.setHeader("Content-Type","text/html;charset=UTF-8;");
//假设路径是http://127.0.0.1:3000/b.html?id=123&name=小明&sex=男#abc
//注意看url.parse(),里面要不要true
//转换对象
var urljson=url.parse(req.url)
console.log(urljson);
//得到文件路径
var pathname=urljson.pathname;
//得到拓展名
var extname=path.extname(pathname);
//得到查询的字符串
var qs=urljson.query;
//转为查询对象,和url.parse加上true非常类似
var qsjson=querystring.parse(qs);
console.log(pathname);
console.log(extname);
console.log(qs);
console.log(qsjson);
res.end("");
});
server.listen(3000);
这是url.parse()加上true之后的效果,此时querystring部分将自动变成一个对象,方便我们存到数据库里.
注意:我们可以发现没有正确识别protocol协议,host主机名等等,因为我们是windows环境,确实有这个问题.