Node.js URL模块

2020-03-30  本文已影响0人  前白

什么是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.hosturl.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 的端口部分。端口值可以是数字或包含 065535(含)范围内的数字字符串。 将值设置为给定 protocolURL 对象的默认端口将会导致 port 值变为空字符串('')。

端口值可以是空字符串,在这种情况下,端口取决于协议/规范:

在为端口分配值后,将首先使用 .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() 的相同。

上一篇下一篇

猜你喜欢

热点阅读