Node.js URL模块

什么是URL?

url全球统一资源定位符,对网站资源的一种简洁表达形式,也称为网址。

URL模块的使用

Node.js 里面有一个内置的 URL 模块,这个模块在代码中使用时需要通过 require() 方法进行引用。但是如果只是在命令行里比如 cmd 或 git bash 等使用此模块,则不需要引用。 引入格式:

var url = require("url");

URL一共提供了三个方法,分别是url.parse()url.format()url.resolve()

示例:

例如我们使用 url 模块中的 parse() 方法获取URL字符串,对其进行解析,然后返回 url 对象:

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 值变为空字符串('')。

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

  • 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() 的相同。

更多可以查看:https://www.9xkd.com/3716132715.html

原文链接:segmentfault.com

上一篇:(前端工程化01)私人管家-包管理器
下一篇:告别传统工业互联网,提高数字管控思维:三维组态分布式能源站

相关推荐

  • 🔥《吊打面试官》系列 Node.js 必知必会必问!

    前言 codeing 应当是一生的事业,而不仅仅是 30 岁的青春🍚 本文已收录 Github,欢迎 Star,一起接水💧 作为一个在互联网公司面一次拿一次 Offer 的面霸,打败了无...

    8 个月前
  • (详解)从浏览器输入 URL 到页面展示过程

    引言 对于面试常问的从浏览器输入 URL 到页面渲染过程发生了什么?,我想大家都或多或少能说出一二。但是,其实这个问题很有深度,而你是否回答的有深度,在很大程度上会影响到面试官对你的印象。

    8 个月前
  • 黄金搭档 -- JS 装饰器(Decorator)与Node.js路由

    很多面对象语言中都有装饰器(Decorator)函数的概念,Javascript语言的ES7标准中也提及了Decorator,个人认为装饰器是和async/await一样让人兴奋的的变化。

    2 年前
  • 验证库对Node.js [关闭]

    George Baileyajsie提出了一个问题:Validation library for Node.js [closed],或许与您遇到的问题类似。 回答者James BrooksBaggz给...

    3 年前
  • 项目中nodejs启动服务失败

    1.第一次提示 This usually happens because your environment has changed since running npm install 百度说是nod...

    9 个月前
  • 页面之间传值之url传值-实现点击携参跳转到详情页

    概念图 实现功能: 电影列表页,数据为动态获取服务器数据,点击某个电影后跳转到电影详情页,数据为根据点击的参数去服务器请求对应数据回来填充到页面显示给用户 效果图 电影列表页 电影详情页 思路及...

    2 年前
  • 面试官:说说node中的可写流

    之前写过一篇流的文章,说说node中可读流和可写流,比较宏观的介绍了流的一些基本概念。下面是之前文章里的一张图: 可以看到可写流相对是比较简单的,主要就是实现了一个缓存的能力。

    6 个月前
  • 面试官问你关于node的那些事(进阶篇)

    前沿:续上次面试官问你关于node的那些事普通篇发出,童鞋反馈说“怎么那么基础啊,这也太水了吧” 这里统一做回复,不基础咋叫“基础篇”呢,只是通过自己的角度,希望能帮助大家更好地去学习,于是...

    5 个月前
  • 面试官问你关于node的那些事(基础篇)

    前沿:文章的起源,是树酱的朋友在最近面试中对部分岗位中对node掌握程度要求感到很“慌 ”,当然node已渐渐从很多公司招聘的“加分项”转变为“强指标”,“慌”的原因无非是因为平时项目无需用...

    5 个月前
  • 面向复杂应用,node.js中的ioc容器 -- rockerjs/core

    基于 TypeScript 和注解的轻量级IoC容器,提供了依赖注入、面向切面编程及异常处理等功能。Rockerjs Core可在任意工程中引入,是一个框架无关的IoC容器。

    2 年前

官方社区

扫码加入 JavaScript 社区