Node.js URL模块
什么是URL?
url全球统一资源定位符,对网站资源的一种简洁表达形式,也称为网址。
URL模块
Node.js里面中有一个内置的URL模块,使用时需要使用require()方法进行引用。如果只是在命令行里比如cmd或git bash 等使用此模块,则不需要引用。
var url = require("url");
URL一共提供了三个方法,分别是url.parse()
,url.format()
,url.resolve()
。
示例:
var url = require('url');
var adr = 'http://localhost:8888/index.html?year=2019&month=September';
var q = url.parse(adr, true);
console.log(q.host);
console.log(q.pathname);
console.log(q.search);
var qdata = q.query;
console.log(qdata.month);
启动文件:
> node urlfile.js
localhost:8888
/index.html
?year=2019&month=September
September
Node.js文件服务器
创建两个html文件,并将它们放到在与node.js文件相同的文件夹中:
first.html
<!DOCTYPE html>
<html>
<body>
<h1>这是第一个文件</h1>
<p>欢迎来到侠课岛</p>
</body>
</html>
second.html
<!DOCTYPE html>
<html>
<body>
<h1>这是第二个文件</h1>
<p>侠课岛是优秀的互联网工作技能在线学习网站</p>
</body>
</html>
创建一个Node.js文件,该文件打开请求的文件并将内容返回给客户端。如果有任何问题,则抛出404错误:
fileserver.js:
var http = require('http');
var url = require('url');
var fs = require('fs');
http.createServer(function (req, res) {
var q = url.parse(req.url, true);
var filename = "." + q.pathname;
fs.readFile(filename, function(err, data) {
if (err) {
res.writeHead(404, {'Content-Type': 'text/html'});
return res.end("404 Not Found");
}
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data);
return res.end();
});
}).listen(8888);
启动文件:
> node fileserver.js
访问http://127.0.0.1:8888/,页面显示
404 Not Found
访问http://127.0.0.1:8888/first.html,页面显示:
这是第一个文件
欢迎来到侠课岛
访问http://127.0.0.1:8888/second.html,页面显示:
这是第二个文件
侠课岛是优秀的互联网工作技能在线学习网站
URL 类的方法和属性
url.parse()方法
url.parse()
方法获取URL字符串,对其进行解析,然后返回URL对象。
语法如下:
url.parse(urlString [,parseQueryString [,slashesDenoteHost]])
urlString -- 要解析的URL字符串
parseQueryString -- 默认为false,query返回的URL对象上的属性将是未解析,未解码的字符串。如果为true,则该query属性将始终设置为querystring模块parse() 方法返回的对象。
shashesDenoteHost -- 默认为false,是否以斜线解析主机名。
url.format()方法
url.format()
方法将传入的url对象编程一个url字符串并返回。
语法如下:
url.format(urlObject)
urlObject -- URL对象(由返回url.parse()或以其他方式构造),如果是字符串,则通过将其传递给来将其转换为对象url.parse()。
url.resolve()方法
url.resolve()
方法以类似于解决锚标记HREF的Web浏览器的方式来解析相对于基础URL的目标URL,返回一个格式为"from/to"的字符串。
语法如下:
url.resolve(from,to)
from -- 要解析的基本URL
to -- 正在解析的HREF URL
url.hash属性
获取并设置URL的片段部分。分配给该hash
属性的值中包含的无效URL字符已进行百分比编码。注意选择要百分比编码的字符可能会与url.parse()和 url.format()方法产生的字符有所不同。
url.host属性
获取并设置URL的主机部分。分配给该host
属性的无效主机值将被忽略。
url.hostnam属性
获取并设置URL的主机名部分。url.host
和 url.hostname
之间的区别是 url.hostname
不包含端口。为 hostname
属性设置无效的值则会被忽略。
url.href属性
获取及设置序列化的 URL。
获取 href
属性的值等同于调用url.toString()。将此属性的值设置为新值等同于使用 new URL(value) 创建新的URL对象。 URL 对象的每个属性都将被修改。如果给 href 属性设置的值是无效的 URL,则将会抛出 TypeError。
url.origin属性
获取只读的序列化的 URL 的 origin。
url.password属性
获取及设置 URL 的密码部分。分配给 password
属性的值中包含的无效 URL 字符是百分比编码的。 选择哪些字符进行百分比编码可能与url.parse() 和 url.format() 方法产生的内容有所不同。
url.pathname属性
获取及设置 URL 的路径部分。
url.port属性
获取及设置 URL 的端口部分。端口值可以是数字或包含 0
到 65535
(含)范围内的数字字符串。 将值设置为给定 protocol
的 URL
对象的默认端口将会导致 port
值变为空字符串(''
)。
端口值可以是空字符串,在这种情况下,端口取决于协议/规范:
-
ftp
:21 -
gopher
:70 -
http
:80 -
https
:443 -
ws
:80 -
wss
:443
在为端口分配值后,将首先使用 .toString()
将值转换为字符串。
url.protocol属性
获取及设置 URL 的协议部分。分配给 protocol
属性的无效协议值将会被忽略。
url.search属性
获取及设置 URL 的序列化查询部分。
url.username属性
获取及设置 URL 的用户名部分。
url.toString()方法
在 URL
对象上调用 toString()
方法将返回序列化的 URL。返回值与 url.href 和 url.toJSON() 的相同。
url.toJSON()方法
在 URL 对象上调用 toJSON() 方法将返回序列化的 URL。 返回值与 url.href 和 url.toString() 的相同。