nodejs中转换URL字符串与查询字符串详解

一个完整的URL字符串中,从"?"(不包括?)到"#"(如果存在#)或者到该URL字符串结束(如果不存在#)的这一部分称为查询字符串.

可以使用Query String模块中的parse方法将该字符串转换为一个对象,parse方法的使用方式如下所示:

querystring.parse(str,[sep],[eq],[options]);

str表示被转换的查询字符串,

sep.字符串中的分隔符,默认是&

eq.该字符串中的分配符,默认为=."="左边是key,右边是value

options:是一个对象,可以在该对象中使用一个整数值类型的maxKeys属性来指定转换后的对象中的属性个数,如果将maxKeys属性值设定为0.其效果等于不使用maxKeys属性值

代码如下:

var querystring=require("querystring");
 var str="username=guoyansi&age=40&sex=male";
 var res=querystring.parse(str);
 console.log("1:%j",res);//1:{"username":"guoyansi","age":"40","sex":"male"}
 res=querystring.parse(str,"!");
 console.log("2:%j",res);//2:{"username":"guoyansi&age=40&sex=male"}
 res=querystring.parse(str,"&");
 console.log("3:%j",res);//3:{"username":"guoyansi","age":"40","sex":"male"}
 str="username=guoyansi!age=40!sex=male";
 res=querystring.parse(str,"!");
 console.log("4:%j",res);//4:{"username":"guoyansi","age":"40","sex":"male"}
 res=querystring.parse(str,"!","=");
 console.log("5:%j",res);//5:{"username":"guoyansi","age":"40","sex":"male"}
 res=querystring.parse(str,"!",":");
 console.log("6:%j",res);//6:{"username=guoyansi":"","age=40":"","sex=male":""}
 res=querystring.parse(str,"!","=",{maxKeys:2});
 console.log("7:%j",res);//7:{"username":"guoyansi","age":"40"}

stringify是将字符串转化成查询字符串的格式.

querystring.stringify(obj,[sep],[eq])

代码如下:

var querystring=require("querystring");
 var res= querystring.stringify({"username":"guoyansi","age":"40","sex":"male"});
 console.log(res);//username=guoyansi&age=40&sex=male
 res=querystring.stringify({"username":"guoyansi","age":"40","sex":"male"},"!");
 console.log(res);//username=guoyansi!age=40!sex=male
 res=querystring.stringify({"username":"guoyansi","age":"40","sex":"male"},"&",":");
 console.log(res);//username:guoyansi&age:40&sex:male
 res=querystring.stringify({"username":"guoyansi","age":["40","24"]},"&","=");
 console.log(res);//username=guoyansi&age=40&age=24

在url模块中,可以使用parse()方法将URL字符串转换为一个对象,根据URL字符串中的不同内容,该对象可能具有的属性及其含义如下.

href:被转换的原URL字符串.
protocol:客户端发出请求时使用的协议.
slashes:在协议与路径中间时候使用"//"分隔符.
host:URL字符串中的完整地址及端口号,该地址可能为一个IP地址,也可能为一个主机名.
auth:URL字符串中的认证信息部分.
hostname:URL字符串中的完整地址,该地址可能为一个IP地址,也可能为一个主机名.
search:Url字符串中的查询字符串,包含起始字符"?"
path:url字符串中的路径,包含查询字符串.
query:url字符串中的查询字符串,不包含起始字符"?",或根据该查询字符串而转换的对象(根据parse()方法所用参数而决定query属性值);
hash:url字符串中的散列字符串,包含起始字符"#".
 
url.parse(urlstr,[parseQueryString]);
urlStr:是需要转换的URL字符串,
parseQueryString:是一个布尔值,当参数为true时,内部使用querystring模块查询字符串转换为一个对象,参数值为false时不执行该转换操作,默认是false

代码如下:

var url=require("url");
 var str="http://user:pass@host,com:8080/users/user.php?username=sisi&age=24&sex=male#name1";
 var res=url.parse(str);
 console.log(res);

代码如下:

{ protocol: 'http:',
  slashes: true,
  auth: 'user:pass',
  host: 'host:8080',
  port: '8080',
  hostname: 'host',
  hash: '#name1',
  search: '?username=sisi&age=24&sex=male',
  query: 'username=sisi&age=24&sex=male',
  pathname: '/,com/users/user.php',
  path: '/,com/users/user.php?username=sisi&age=24&sex=male',
  href: 'http://user:pass@host:8080/,com/users/user.php?username=sisi&age=24&sex=male#name1' }

代码如下:

var url=require("url");
 var str="http://user:pass@host,com:8080/users/user.php?username=sisi&age=24&sex=male#name1";
 var res=url.parse(str,true);
 console.log(res);

代码如下:

{ protocol: 'http:',
  slashes: true,
  auth: 'user:pass',
  host: 'host:8080',
  port: '8080',
  hostname: 'host',
  hash: '#name1',
  search: '?username=sisi&age=24&sex=male',
  query: { username: 'sisi', age: '24', sex: 'male' },
  pathname: '/,com/users/user.php',
  path: '/,com/users/user.php?username=sisi&age=24&sex=male',
  href: 'http://user:pass@host:8080/,com/users/user.php?username=sisi&age=24&sex=male#name1' }

第一个例子和第二个例子不同之处在于parse的第二个参数,导致了结果中的query的不同

可以将一个url转换过的对象转换成一个url字符串.

代码如下:

var url=require("url");
 var str="http://user:pass@host,com:8080/users/user.php?username=sisi&age=24&sex=male#name1";
 var res=url.parse(str,true);
 console.log(url.format(res));

结果是:

http://user:pass@host:8080/,com/users/user.php?username=sisi&age=24&sex=male#name1

以上就是node中转换URL字符串与查询字符串的全部内容了,好好研究下,其实挺简单的。

(0)

相关推荐

  • Node.js学习之地址解析模块URL的使用详解

    前言 本文主要给大家介绍了关于Node.js地址解析模块URL使用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. url结构化/模块化/路径解析 结构化:url.parse(urlString[, parseQueryString[, slashesDenoteHost]]) 模块化:url.format(urlObject) 路径解析:url.resolve(from, to) 一个URL字符串是一个结构化的字符串包含多个有意义的组件.在解析时,返回一个URL对象

  • NodeJS url验证(url-valid)的使用方法

    Javascript做url检验,通常是使用正则表达式来判定,其格式是否正确,例如: 复制代码 代码如下: /^https?:\/\//.test(url); 当然还有更好的检测方法比如基于RFC 3986, RFC 3966, RFC 4694, RFC 4759, RFC 4904等标准的进行验证的valid-url库.不过个根据格式进行验证当然不能确定该url是否存在啦,所以就有了url-valid,我们基于HTTP请求进行验证. 接口设计实际上我们只需要一个函数传入一个url地址,并回调

  • nodejs入门教程四:URL相关模块用法分析

    本文实例讲述了nodejs入门教程之URL相关模块用法.分享给大家供大家参考,具体如下: 1.URL 模块:用于 URL 处理与解析 1)URI 与 URL : URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源. URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate(定位)这个资源. 2)URL模块中的方法: ① url.format(ur

  • nodejs URL模块操作URL相关方法介绍

    url模块 处理HTTP请求时url模块使用率超高,因为该模块允许解析URL.生成URL,以及拼接URL.首先我们来看看一个完整的URL的各组成部分. 复制代码 代码如下: href  -----------------------------------------------------------------                             host              path                       --------------- --

  • node.js中的url.parse方法使用说明

    方法说明: 讲一个URL字符串转换成对象并返回. 语法: 复制代码 代码如下: url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) 接收参数: urlStr                                       url字符串 parseQueryString                   为true时将使用查询模块分析查询字符串,默认为false slashesDenoteHost 默认为false,/

  • node.js中的url.resolve方法使用说明

    方法说明: 为URL或 href 插入 或 替换原有的标签.(不懂可以看例子) 语法: 复制代码 代码如下: url.resolve(from, to) 由于该方法属于url模块,使用前需要引入url模块(var url= require("url") ) 接收参数: from             源地址 to                 需要添加或替换的标签 例子: 复制代码 代码如下: var url = require('url'); var a = url.resolv

  • nodejs实现获取当前url地址及url各种参数值

    复制代码 代码如下: //需要使用的模块 http   url 当前url   http://localhost:8888/select?aa=001&bb=002 var http = require('http'); var URL = require('url'); http.createServer(function(req, res){    var arg = url.parse(req.url).query;  //方法一arg => aa=001&bb=002   

  • NodeJS的url截取模块url-extract的使用实例

    上次介绍了怎么利用NodeJS + PhantomJS进行截图,但由于对每次截图操作,都启用了一个PhantomJS进程,所以并发量上去后,效率堪忧,所以我们重写了所有代码,并将其独立成为一个模块,方便调用.如何改进?控制线程数,以及单线程处理url数量.使用Standard Output & WebSocket 进行通讯.添加缓存机制,目前使用Javascript Object进行.对外提供简易的接口. 设计图 依赖 & 安装 由于PhantomJS 1.9.0+才开始支持Websock

  • node.js中的url.format方法使用说明

    方法说明: 将一个解析后的URL对象.转成.一个格式化的URL字符串. 语法: 复制代码 代码如下: url.format(urlObj) 接收参数: urlObj 表示 URL对象,可包含以下属性:(可对照例子) href                      完整路径 protocolis            协议(如http://) auth hostname            主机名 port                      端口 host              

  • NodeJS学习笔记之(Url,QueryString,Path)模块

    一,开篇分析 这篇文章把这三个模块拿来一起说,原因是它们各自的篇幅都不是很长,其次是它们之间存在着依赖关系,所以依次介绍并且实例分析.废话不多说了,请看下面文档: (1),"Url模块" 来个小栗子: 复制代码 代码如下: var url = require('url');  var queryUrl = "http://localhost:8888/bb?name=bigbear&memo=helloworld" ;  console.log(typeof

随机推荐