本文对Node的内置模块Query String进行介绍,包括基本情况和简单使用。

一、模块简介

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' }
options配置对象中当字段maxKeys的值为0时等价于没有设置该参数。

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.parseJSON.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的更多相关文章

  1. openlayers5-webpack 入门开发系列一初探篇(附源码下载)

    前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...

  2. leaflet-webpack 入门开发系列一初探篇(附源码下载)

    前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...

  3. 【Windows10 IoT开发系列】配置篇

    原文:[Windows10 IoT开发系列]配置篇 Windows10 For IoT是Windows 10家族的一个新星,其针对不同平台拥有不同的版本.而其最重要的一个版本是运行在Raspberry ...

  4. 旨在脱离后端环境的前端开发套件 - IDT Server篇

    IDT,一个基于Nodejs的,旨在脱离后端环境的前端开发套件,目的就是能让前端开发完全脱离后端的环境,无论后端是什么模板引擎(主流),都能应付自如. IDT主要包括两大部分:Server + Bui ...

  5. cesium-webpack 入门开发系列一初探篇(附源码下载)

    前言 cesium-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 we ...

  6. 前端开发【第2篇:CSS】

    鸡血 样式的属性多达几千个,但别担心,按照80-20原则,常用的也就几十个,你完全可以掌握它. Css初识 HTML的诞生 早期只有HTML的时候为了让HTML更美观一点,当时页面的开发者会把颜色写到 ...

  7. [置顶]【实用 .NET Core开发系列】- 导航篇

    前言 此系列从出发点来看,是 上个系列的续篇, 上个系列因为后面工作的原因,后面几篇没有写完,后来.NET Core出来之后,注意力就转移到了.NET Core上,所以再也就没有继续下去,此是原因之一 ...

  8. openlayers4 入门开发系列之风场图篇

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  9. openlayers4 入门开发系列之热力图篇(附源码下载)

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  10. Android Metro风格的Launcher开发系列第三篇

    前言: 各位小伙伴,又到了每周更新文章了时候了,本来是周日能发出来呢,这不是赶上清明节吗,女王大人发话了,清明节前两天半陪她玩,只留给我周一下午半天时间写博客,哪里有女王哪里就有压迫呀有木有!好了闲话 ...

随机推荐

  1. ocr识别遇到的小问题-图片的EXIF 元数据

    背景   之前在公司通过paddleocr写了个接口,传入图片的base64编码返回识别出的文字信息.但是图片为横向时,文字行会乱序,所以准备新加一个功能通过paddleclas推理图片文字的倾斜角度 ...

  2. 『Plotly实战指南』--雷达图绘制与应用

    在数据分析和可视化领域,雷达图是一种适用于多维数据的可视化.综合评估和决策支持的工具. 雷达图通过将数据点沿多个轴分布,并通过多边形面积或线条连接来展示数据的多维度特征,能够直观地呈现数据在各个维度上 ...

  3. python读取文件夹内所有图片名称,随机设置为桌面壁纸且把设置后的图片移到其他文件夹内的方法

    关键词:读取文件夹.读取文件.操作系统.设置壁纸.移动文件 预期实现如下几个步骤 1.获取指定文件夹内所有图片名 2.随机取一张图片设置为壁纸 3.设置为壁纸的图片移动到另外一个文件夹中 第一步,获取 ...

  4. 记录一个仿Windows10加载动画

    1 <UserControl x:Class="Zhaoxi.Controls.Loading" 2 xmlns="http://schemas.microsoft ...

  5. EFCore学习(二)——添加,修改,删除,查询操作及将EFCore语句编译成sql

    实质: EFCore的底层实际是将关于实体类的的操作编译成sql,然后让ado.net去执行 在Program.cs里使用SchoolContext 说明:需要SchoolContext.cs声明实体 ...

  6. VC6.0工具下载安装

    公众号回复:'VC6.0'

  7. 基于Python和uiautomation的Windows桌面自动化操作方案

    基于Python和uiautomation的Windows桌面自动化操作方案 在日常开发和测试过程中,我们经常需要对Windows桌面应用程序进行自动化操作.本文将记录如何使用uiautomation ...

  8. Linux还能拯救U盘???---U盘的起死回生

    作死;): 今天U盘在处理某些东西的时候,我性子急,直接把进程结束了,然后,就悲剧了( ̄ 'i  ̄;) 插到电脑上,一插就卡,一点就未响应,未响应.... PE系统打开还是老样子... 右键想格式化, ...

  9. 【BUG】vite build、Flask运行后报错Failed to load module script. Strict MIME type checking is enforced

    解决方案来源于Stack Overflow. 翻译来源于javascript - Python Flask - 错误 : "Failed to load module script. Str ...

  10. Vue中的APP与js的对象字面量

    JavaScript的对象字面量是一种方便创建和初始化对象的语法.它允许您直接在代码中定义对象,而无需使用类或构造函数.对象字面量使用大括号{}括起来,并包含零个或多个键值对. 以下是JavaScri ...