首页 > 编程语言 >前端开发系列081-Node篇之queryString

前端开发系列081-Node篇之queryString

时间:2022-12-16 09:11:48浏览次数:56  
标签:Node star name querystring 081 LiuY queryString 931007 password

title: '前端开发系列081-Node篇之queryString'
tags:
  - Node系列
categories: []
date: 2018-08-26 23:20:13
本文对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"}

标签:Node,star,name,querystring,081,LiuY,queryString,931007,password
From: https://www.cnblogs.com/wendingding/p/16986489.html

相关文章

  • 前端开发系列079-Node篇之npm+
    title:'前端开发系列079-Node篇之npm+'tags:-Node系列categories:[]date:2018-07-2816:21:13本文介绍NPM系列核心工具(npm、nrm、npx和nvm)的基本使用和常用......
  • 前端开发系列078-Node篇之npm
    title:'前端开发系列078-Node篇之npm'tags:-Node系列categories:[]date:2018-07-2523:21:13本文输出Node中和包管理有关的基本内容,即npm的使用。一、简单介......
  • nodejs命令行内部中执行js文件(编辑模式)
    我想在这种状态中执行js文件,用来调试一些代码,没找到现成的函数,只能是读取文件然后eval了vardstr=''fs.readFile('./run.js','utf8',function(err,datastr) { if(e......
  • element Cascader级联选择框clearCheckedNodes失效的解决办法
    问题:当我只选择了父级选项,并没有选择二级选项,然后关闭弹框后再次打开弹框,此时仍然保留了上次选中的父级选项(重新打开图二需回到图一) 图一图二  解决:找了一圈......
  • java DefaultMutableTreeNode 树形结构
    目录1.Tree的概念11.1.treeNode接口,mutabletreenode接口11.2.10-4:以TreeModel构造JTree.12.功能要求22.1.树形结构节点的查找与定位23.节点......
  • Linux inode详解
    1、inode和block概述block:操作系统在读取硬盘的时候,会一次性读取一“块”(block),这种块是文件存取的最小的单位,block的大小常见的是4KB,即八个扇区构成。(硬盘的最小存储单位......
  • 前端开发系列077-Node篇之package
    title:'前端开发系列077-Node篇之package'tags:-Node系列categories:[]date:2018-07-2423:20:13本文输出Node中和包有关的基本内容。一、Node中的模块和包......
  • nodemon 简介、安装和基本使用
    nodemon先看下官网的简介:Nodemonisautilitydependedonabout3millionprojects,thatwillmonitorforanychangesinyoursourceandautomaticallyrestartyou......
  • 【Node.JS 】path路径模块
      往期文章​​【Node.JS练习】考试成绩整理​​​​【Node.JS】buffer类缓冲区​​​​【Node.JS】事件的绑定与触发​​​​【Node.JS】写入文件内容​​​​【Node.JS......
  • #yyds干货盘点#node.js链接MongoDB数据库
    在这之前确保当前环境下安装了mongodb的模块,且mongodb数据库已经启动,安装mongodb模块到当前目录可以通过yarnaddmongodb我此时安装的是v4.1.4版本的mongodb常见的连接方法......