前端开发系列081-Node篇之queryString
一、模块简介
Query String是Node的内置核心模块之一,无需单独安装。在Nodejs文件中可以直接在代码里通过var querystring = require("querystring")的方式来进行加载,该模块主要用来处理URL路径中查询字符串的转换工作。
查询字符串 在GET请求的URL路径中,请求的参数会以键值对的方式拼接(键和值之间使用=连接,多个键值对之间使用&符号连接)并以?分隔符跟在请求路径的后面。这一段参数字符串其实就是查询字符串,譬如在http://www.wendingding.com/doc?name=node系列-NPM&page=1这个URL路径中,name=node系列-NPM&page=1就是所谓的查询字符串。
在命令行环境中可以直接通过REPL来查看Query String模块的内容,这个模块本身返回一个对象。
bogon:~ wendingding$ node
> querystring
{ unescapeBuffer: [Function: unescapeBuffer],
unescape: [Function: qsUnescape],
escape: [Function: qsEscape],
stringify: [Function: stringify],
encode: [Function: stringify],
parse: [Function: parse],
decode: [Function: parse] }
Query String模块中两个比较重要的方法
parse方法用于将查询字符串转换为对象。stringify方法用于将对象序列化为查询字符串。
二、基本使用
这里主要介绍Query String模块中常用方法的基本使用、这些方法的作用、参数传递以及返回值结构等情况,并提供简短的代码示例。
parse方法
作用 把查询字符串转换(反序列化)为对象。
语法 querystring.parse( str , [ sep ] , [ eq ] , [ options ])
参数
- str
字符串类型 | 指定待转换的查询字符串。
- sep
字符串类型 | 指定查询字符串中的分隔字符,默认为`&`。
- eq
字符串类型 | 指定查询字符串中的分配字符(连接键和值),默认为`=`。
- options
对象类型 | 设置maxKeys字段的值可以来控制转换结果中属性的个数。
返回值 反序列化成功后,将返回转换后的对象。
示例
//001 最简单的使用方式
wendingding$ node
> var str = "name=LiuY&password=931007&star=best";
undefined
> var obj = querystring.parse(str);
undefined
> obj
{ name: 'LiuY', password: '931007', star: 'best' }
//002 测试分割字符参数
> querystring.parse("name=LiuY&password=931007&star=best");
{ name: 'LiuY', password: '931007', star: 'best' }
> querystring.parse("name=LiuY&password=931007&star=best","@");
{ name: 'LiuY&password=931007&star=best' }
> querystring.parse("name=LiuY@password=931007@star=best","@");
{ name: 'LiuY', password: '931007', star: 'best' }
//003 测试分配字符
> querystring.parse("name=LiuY&password=931007&star=best","&","=");
{ name: 'LiuY', password: '931007', star: 'best' }
> querystring.parse("name=LiuY&password=931007&star=best","&",":");
{ 'name=LiuY': '', 'password=931007': '', 'star=best': '' }
> querystring.parse("name:LiuY&password:931007&star:best","&",":");
{ name: 'LiuY', password: '931007', star: 'best' }
//004 测试配置对象
> querystring.parse("name=LiuY&password=931007&star=best","&","=",{maxKeys:2});
{ name: 'LiuY', password: '931007' }
> querystring.parse("name=LiuY&password=931007&star=best","&","=",{maxKeys:1});
{ name: 'LiuY' }
> querystring.parse("name=LiuY&password=931007&star=best","&","=",{maxKeys:0});
{ name: 'LiuY', password: '931007', star: 'best' }
stringify方法
作用 把对象序列化为查询字符串。
语法 querystring.stringify( obj , [ sep ] , [ eq ] )
参数
- obj
对象类型 | 指定待转换的对象。
- sep
字符串类型 | 指定查询字符串中的分隔字符,默认为`&`。
- eq
字符串类型 | 指定查询字符串中的分配字符(连接键和值),默认为`=`。
返回值 序列化成功后,返回转换后的查询字符串。
示例
//001 基本用法
wendingding$ node
> var obj = { name: 'wendingding', password: '911021', star: 'other' }
undefined
> querystring.stringify(obj);
'name=wendingding&password=911021&star=other'
//002 测试分隔字符参数
> querystring.stringify(obj,"@");
'name=wendingding@password=911021@star=other'
//003 测试分配字符参数
> querystring.stringify(obj,"&",":");
'name:wendingding&password:911021&star:other'
//004 如果生成的查询字符串中有中文那么默认进行转码处理
> querystring.stringify({ name: '文顶顶', password: '911021', star: 'other' });
'name=%E6%96%87%E9%A1%B6%E9%A1%B6&password=911021&star=other'
三、番外篇
通过学习我们发现,Query String模块不论是内部结构还是其主要方法的使用相对都是比较简单的。如果您对JavaScript语言比较熟悉那么就会发现Query String模块中的序列化和反序列方法同JavaScript语言中原生的JSON.parse和JSON.stringify方法很像,而转换的过程和jQuery框架中$().serialize()内部依赖的$.param方法也几乎无差。
其实,如果要自己动手来实现也不会很复杂,下面列出示例代码。
function stringify(obj) {
var arrM = [];
for (var key in obj)
{
arrM.push(key + "=" + obj[key]);
}
return encodeURI(arrM.join("&"));
}
function parse(str) {
var objM = {};
var arrM = decodeURI(str).split("&");
for (var i = 0; i < arrM.length; i ++)
{
var keyAndValueArr = arrM[i].split("=");
objM[keyAndValueArr[0]] = keyAndValueArr[1];
}
return objM;
}
//测试代码和运行结果
var obj = {name:"文顶顶",age:18};
console.log(stringify(obj)); //name=%E6%96%87%E9%A1%B6%E9%A1%B6&age=18
console.log(parse(stringify(obj))); //{name: "文顶顶", age: "18"}
前端开发系列081-Node篇之queryString的更多相关文章
- openlayers5-webpack 入门开发系列一初探篇(附源码下载)
前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...
- leaflet-webpack 入门开发系列一初探篇(附源码下载)
前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...
- 【Windows10 IoT开发系列】配置篇
原文:[Windows10 IoT开发系列]配置篇 Windows10 For IoT是Windows 10家族的一个新星,其针对不同平台拥有不同的版本.而其最重要的一个版本是运行在Raspberry ...
- 旨在脱离后端环境的前端开发套件 - IDT Server篇
IDT,一个基于Nodejs的,旨在脱离后端环境的前端开发套件,目的就是能让前端开发完全脱离后端的环境,无论后端是什么模板引擎(主流),都能应付自如. IDT主要包括两大部分:Server + Bui ...
- cesium-webpack 入门开发系列一初探篇(附源码下载)
前言 cesium-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 we ...
- 前端开发【第2篇:CSS】
鸡血 样式的属性多达几千个,但别担心,按照80-20原则,常用的也就几十个,你完全可以掌握它. Css初识 HTML的诞生 早期只有HTML的时候为了让HTML更美观一点,当时页面的开发者会把颜色写到 ...
- [置顶]【实用 .NET Core开发系列】- 导航篇
前言 此系列从出发点来看,是 上个系列的续篇, 上个系列因为后面工作的原因,后面几篇没有写完,后来.NET Core出来之后,注意力就转移到了.NET Core上,所以再也就没有继续下去,此是原因之一 ...
- openlayers4 入门开发系列之风场图篇
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
- openlayers4 入门开发系列之热力图篇(附源码下载)
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
- Android Metro风格的Launcher开发系列第三篇
前言: 各位小伙伴,又到了每周更新文章了时候了,本来是周日能发出来呢,这不是赶上清明节吗,女王大人发话了,清明节前两天半陪她玩,只留给我周一下午半天时间写博客,哪里有女王哪里就有压迫呀有木有!好了闲话 ...
随机推荐
- Javascript+webdriverio实现app自动化demo
1.新建工程和安装库 使用WebStorm新建一个空项目然后在编辑器打开终端输入如下命令: npm init -y npm install webdriverio npm install sleep ...
- Git撤销本地commit(未push)
查询commit日志 git log 查询到自己commit的上个版本id(commit_id) 撤销(这里是放弃自己commit的更改,直接回退到上个版本源码) git reset --hard c ...
- 🔥吐血整理 Bolt.diy 部署与应用攻略
1.前言 以前总是有很多人无代码基础的人总是在幻想,如何不要自己写代码就可以建立一个自己的创意网站呢?之前总觉得异想天开不可能,屏幕前的你是不是也是这么想的呢,没有想到,Bolt.diy帮你实现了,快 ...
- W.js ,一个超级小的三维 WebGL 引擎的使用方法
目录 前言 它的特点 API 入门使用 内置模型 导入自己的模型 动画 自定义投影矩阵 摄像机与主角绑定 解除绑定 前言 我们知道,在网页上搞三维,three.js 和 babylon.js 都是成熟 ...
- Spring Boot Jpa封装快速构建Specification、OrderBy、Pageable的查询条件
1.简介 在我们使用JPA时,构建 Specification 查询条件时重复代码过多,而且需要大量的无效代码. 2.工具类提供的方法 2.1.自动构建规范 /** * 自动构建规范 * * @p ...
- js技术之“自定义包含方案”
调用 // 用于判断包含 function diaoyong(arr, str){ // 初始化 var sizes = ['L','XL','S','M']; for (var i = 0; i & ...
- c# 批量注入示例代码
using Microsoft.Extensions.DependencyInjection; using System; using System.Linq; using System.Reflec ...
- 解决VMware虚拟机安装centos无法联网问题
网上的教程几乎试了个遍,最后使用该方法成功解决. 用终端进入目录:/etc/sysconfig/network-scripts 执行ls命令查看以"ifcfg-en"开头的文件,例 ...
- SpringBoot性能优化的12个小技巧
前言 不知道你在SpringBoot项目中,有没有遇到过下面这样的代码: @GetMapping("/orders") public List<Order> listO ...
- 浅析领域驱动模型VO、DTO、BO、PO 等的概念、区别及其用法
摘要:浅析POJO.DTO.DO.VO.BO.PO和Entity等的概念.区别及其用法. 名词解释 领域模型中的实体类分为四种模型:VO.DTO.DO和PO,各种实体类用于不同业务层次间的交互,并 ...