前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nodejs解析url

nodejs解析url

作者头像
OECOM
发布2020-07-01 17:25:04
3.5K0
发布2020-07-01 17:25:04
举报
文章被收录于专栏:OECOMOECOM

nodejs中,提供了url这个非常实用的模块,用来做URL的解析。在做node服务端的开发时会经常用到。使用很简单,总共只有3个方法。

先看下面这个图,介绍了url相关知识点

nodejs解析url
nodejs解析url

模块方法概述

url模块三个方法分别是:

  1. .parse(urlString):将url字符串,解析成object,便于开发者进行操作。
  2. .format(urlObj):.parse() 方法的反向操作。
  3. .resove(from, to):以from作为起始地址,解析出完整的目标地址(还是看直接看例子好些)

url解析:url.parse()

完整语法:url.parse(urlString[, parseQueryString[, slashesDenoteHost]])

使用比较简单,几个要点备忘如下。

  1. parseQueryString:(默认为false)如为false,则urlObject.query为未解析的字符串,比如https://www.oecom.cn/?name=%E8%90%BD%E5%B8%86%E4%BA%AD,且对应的值不会decode;如果parseQueryString为true,则urlObject.query为object,比如{ name: '落帆亭' },且值会被decode;
  2. slashesDenoteHos:(默认为false)如果为true,那么类似//foo/bar里的foo就会被认为是hostname;如果为false,则foo被认为是pathname的一部分。
  3. 关于解析得到的 urlObject ,会在下一小节进行详细介绍。

对参数值不进行解析

也就是说parseQueryString不填,或者写成false

代码语言:javascript
复制
var url = require('url');
var str = 'http://Chyingp:HelloWorld@ke.qq.com:8080/index.htm?lname=%E8%90%BD%E5%B8%86%E4%BA%AD#part=1';

var obj = url.parse(str);
console.log(obj);

其输出解析结果为

nodejs解析url
nodejs解析url

在上图当中query字段并不是JSON对象的形式,而且参数也是经过url编码之后的形式。

对参数值进行解析

也就是说parseQueryString写成true

代码语言:javascript
复制
var url = require('url');
var str = 'http://Chyingp:HelloWorld@ke.qq.com:8080/index.htm?lname=%E8%90%BD%E5%B8%86%E4%BA%AD#part=1';

var obj = url.parse(str,true);
console.log(obj);
nodejs解析url
nodejs解析url

通过对比可以看出解析之后的query变成了一个JSON格式的对象,方便开发时获取参数。

再说第三个参数

slashesDenoteHost 是指当url是 ‘http://’ 或 ‘ftp://’ 等标志的协议前缀打头的,或直接以地址打头,如 ‘127.0.0.1’ 或 ‘localhost’ 时候是没有区别的;当且仅当以2个斜杠打头的时候,比如 ‘//127.0.0.1’ 才有区别。这时候,如果其值为true,则第一个单个 ‘/’ 之前的部分被解析为 ‘host’ 和 ‘hostname’,如 ” host : ‘127.0.0.1’ “,如果为false,包括2个反斜杠在内的所有字符串被解析为pathname。

以//localhost/www/index?name=落帆亭&password=123456为例

代码语言:javascript
复制
var url = require('url')
var path = '//localhost/www/index?name=落帆亭&password=123456';
var obj = url.parse(path,true,true);
console.log(obj);

输出结果

nodejs解析url
nodejs解析url

当值为false时

代码语言:javascript
复制
var url = require('url')
var path = '//localhost/www/index?name=落帆亭&password=123456';
var obj = url.parse(path,true,false);
console.log(obj);

结果为

nodejs解析url
nodejs解析url

可自行对比两个结果之间的差异。

下面来详细看一下urlobject中各属性的具体含义

  • protocol:协议,需要注意的是包含了:,并且是小写的。
  • slashes:如果:后面跟了两个//,那么为true。
  • auth:认证信息,如果有密码,为usrname:passwd,如果没有,则为usrname。注意,这里区分大小写。
  • host:主机名。注意包含了端口,比如ke.qq.com:8080,并且是小写的。
  • hostname:主机名,不包含端口,并且是小写的。
  • hash:哈希部分,注意包含了#
  • search:查询字符串,注意,包含了?,此外,值是没有经过decode的。
  • query:字符串 或者 对象。如果是字符串,则是search去掉?,其余一样;如果是对象,那么是decode过的。
  • path:路径部分,包含search部分。
  • pathname:路径部分,不包含search部分。
  • href:原始的地址。不过需要注意的是,protocolhost会被转成小写字母。

url拼接:url.format(urlObject)

完整语法:url.format(urlObject)

url.parse(str)的反向操作,urlObject包含了很多字段,比如protocolslashesprotocol等,且不一定需要全部传。

代码语言:javascript
复制
url.format({
  protocol: 'https',
  hostname: 'oecom.cn',
  pathname: '/some/path',
  query: {
    page: 1,
    format: 'json'
  }
});

输出结果为

代码语言:javascript
复制
'https://oecom.cn/some/path?page=1&format=json'

url.resolve(from, to)

这个方法类似于解析锚标记HREF的Web浏览器的方式解析相对于基本URL的目标URL。下面请之间看例子

代码语言:javascript
复制
const url = require('url');
url.resolve('/one/two/three', 'four');         // '/one/two/four'
url.resolve('http://example.com/', '/one');    // 'http://example.com/one'
url.resolve('http://example.com/one', '/two'); // 'http://example.com/two'
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-06-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模块方法概述
  • url解析:url.parse()
    • 对参数值不进行解析
      • 对参数值进行解析
        • 再说第三个参数
        • url拼接:url.format(urlObject)
        • url.resolve(from, to)
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档