Node.JS获取GET,POST数据之queryString模块使用方法详解


Posted in Javascript onFebruary 06, 2020

无论是前端还是后端,经常出现的应用场景是URL中参数的处理。nodeJS的queryString模块提供了一些处理 query strings 的工具。本文将详细介绍nodeJS中的queryString

var querystring = require('querystring');
/*
{ unescapeBuffer: [Function],
 unescape: [Function: qsUnescape],
 escape: [Function],
 encode: [Function],
 stringify: [Function],
 decode: [Function],
 parse: [Function] }
 */
console.log(querystring);

序列化

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

querystring.parse()方法能把一个URL查询字符串(str)解析成一个键值对的集合,参数如下

str <String> 要解析的 URL 查询字符串。

sep <String> 用于界定查询字符串中的键值对的子字符串。默认为 '&'。

eq <String> 用于界定查询字符串中的键与值的子字符串。默认为 '='。

options <Object>

    decodeURIComponent <Function> 当解码查询字符串中百分号编码的字符时使用的函数。默认为 querystring.unescape()   

maxKeys <number> 指定要解析的键的最大数量。默认为 1000。指定为 0 则移除键数的限制

var querystring = require('querystring');

var str = 'foo=bar&abc=xyz&abc=123';

console.log(querystring.parse(str));//'{ foo: 'bar', abc: [ 'xyz', '123' ] }'

第二个参数用于界定查询字符串中的键值对的子字符串

var querystring = require('querystring');

var str = 'foo=bar&abc=xyz&abc=123';

console.log(querystring.parse(str,'a'));//{ foo: 'b', 'r&': '', bc: [ 'xyz&', '123' ] }

第三个参数用于界定查询字符串中的键与值的子字符串

var querystring = require('querystring');

var str = 'foo=bar&abc=xyz&abc=123';

console.log(querystring.parse(str,'&','c'));//{ 'foo=bar': '', ab: [ '=xyz', '=123' ] }

[注意]querystring.parse()方法返回的对象不继承自 JavaScript 的 Object。 这意味着典型的 Object 方法如 obj.toString()、obj.hasOwnProperty() 等没有被定义且无法使用

默认情况下,查询字符串中的百分号编码的字符会被认为使用了 UTF-8 编码。 如果使用的是另一种字符编码,则 decodeURIComponent 选项需要被指定

var querystring = require('querystring');

//{ w: '����', foo: 'bar' }

console.log(querystring.parse('w=%D6%D0%CE%C4&foo=bar', null, null,{ decodeURIComponent: 'gbkDecodeURIComponent' }));

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

querystring.stringify()方法是querystring.parse()方法的逆向操作,通过遍历对象的自有属性,从一个给定的obj产生一个URL查询字符串,参数如下

obj <Object> 要序列化成一个 URL 查询字符串的对象

sep <String> 用于界定查询字符串中的键值对的子字符串。默认为 '&'

eq <String> 用于界定查询字符串中的键与值的子字符串。默认为 '='

options

    encodeURIComponent <Function> 当把对URL不安全的字符转换成查询字符串中的百分号编码时使用的函数。默认为 querystring.escape()

var querystring = require('querystring');

//'foo=bar&baz=qux&baz=quux&corge='

console.log(querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' }));

var querystring = require('querystring');

//'foo:bar;baz:qux'

console.log(querystring.stringify({foo: 'bar', baz: 'qux'}, ';', ':'));

queryString模块编码

querystring.escape(str)

querystring.escape()方法对给定的str执行URL百分号编码,与encodeURIComponent方法一样

querystring.escape()方法是供querystring.stringify()使用的,且通常不被直接使用。它之所以对外开放,是为了在需要时可以通过给querystring.escape赋值一个函数来重写编码的实现

var querystring = require('querystring');

console.log(encodeURIComponent('测试'));//%E6%B5%8B%E8%AF%95

console.log(querystring.escape('测试'));//%E6%B5%8B%E8%AF%95

querystring.unescape(str)

querystring.unescape() 方法对给定的 str 上的 URL 百分号编码的字符执行解码

querystring.unescape()方法是供querystring.parse()使用的,且通常不被直接使用。它之所以对外开放,是为了在需要时可以通过给querystring.unescape赋值一个函数来重写解码的实现。

querystring.unescape()方法默认使用JavaScript内置的decodeURIComponent() 方法来解码

var querystring = require('querystring');

console.log(decodeURIComponent('%E6%B5%8B%E8%AF%95'));//'测试'

console.log(querystring.unescape('%E6%B5%8B%E8%AF%95'));//'测试'

Node.JS获取GET数据

get请求的数据保存在URL中

http://127.0.0.1:8080/home/test?a=1&b=2
var http = require('http');
var url = require('url');
var querystring = require('querystring');
http.createServer(function(req,res){
  var urlObj = url.parse(req.url);
  var query = urlObj.query;
  var queryObj = querystring.parse(query);
  console.log(req.url);//'/home/test?a=1&b=2'
  console.log(query);//'a=1&b=2'
  console.log(queryObj);//{ a: '1', b: '2' }
}).listen(8080);

Node.JS获取POST数据

post请求的数据会被写入缓冲区中,需要通过request的data事件和end事件来进行数据拼接处理

var http = require('http');
var url = require('url');
var querystring = require('querystring');
http.createServer(function(req,res){
  var str = ''; 
  req.on('data', function(thunk){
    str += thunk;
  });
  req.on('end', function(){
    console.log(str);//'name=a&email=b%40b.com'
    var queryObj = querystring.parse(str);
    console.log(queryObj);//{ name: 'a', email: 'b%40b.com' }
  });

更多关于Node.JS获取GET,POST数据的文章请点击下面的相关链接

Javascript 相关文章推荐
js 小贴士一星期合集
Apr 07 Javascript
js函数setTimeout延迟执行的简单介绍
Jul 17 Javascript
返回上一页并自动刷新的JavaScript代码
Feb 19 Javascript
JQuery 控制内容长度超出规定长度显示省略号
May 23 Javascript
简介JavaScript中Boolean.toSource()方法的使用
Jun 05 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
Jul 15 Javascript
轻松掌握JavaScript策略模式
Aug 25 Javascript
Bootstrap实现基于carousel.js框架的轮播图效果
May 02 Javascript
element-ui table span-method(行合并)的实现代码
Dec 20 Javascript
js实现删除li标签一行内容
Apr 16 Javascript
layui动态加载多表头的实例
Sep 05 Javascript
用原生JS实现爱奇艺首页导航栏代码实例
Sep 19 Javascript
node.JS事件机制与events事件模块的使用方法详解
Feb 06 #Javascript
如何通过javaScript去除字符串两端的空白字符
Feb 06 #Javascript
ckeditor一键排版功能实现方法分析
Feb 06 #Javascript
JavaScript如何判断input数据类型
Feb 06 #Javascript
如何使用Jquery动态生成二级选项列表
Feb 06 #jQuery
CKEditor扩展插件:自动排版功能autoformat插件实现方法详解
Feb 06 #Javascript
JS实现盒子拖拽效果
Feb 06 #Javascript
You might like
谈谈新手如何学习PHP
2006/12/14 PHP
使用PHP求两个文件的相对路径
2013/06/20 PHP
PHP实现C#山寨ArrayList的方法
2015/07/16 PHP
php实现json编码的方法
2015/07/30 PHP
Laravel 自动生成验证的实例讲解:login / logout
2019/10/14 PHP
javascript 面向对象全新理练之继承与多态
2009/12/03 Javascript
JavaScript控制Session操作方法
2013/01/17 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
2014/01/16 Javascript
jQuery中remove()方法用法实例
2014/12/25 Javascript
Web表单提交之disabled问题js解决方法
2015/01/13 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
基于zepto的移动端轻量级日期插件--date_picker
2016/03/04 Javascript
利用Angularjs中模块ui-route管理状态的方法
2016/12/27 Javascript
基于BootStrap的前端分页带省略号和上下页效果
2017/05/18 Javascript
vue.js国际化 vue-i18n插件的使用详解
2017/07/07 Javascript
PHP webshell检查工具 python实现代码
2009/09/15 Python
详解Python中的__new__()方法的使用
2015/04/09 Python
python冒泡排序简单实现方法
2015/07/09 Python
Python编程实现微信企业号文本消息推送功能示例
2017/08/21 Python
itchat和matplotlib的结合使用爬取微信信息的实例
2017/08/25 Python
python跳过第一行快速读取文件内容的实例
2018/07/12 Python
Python 中的lambda函数介绍
2018/10/10 Python
Python File(文件) 方法整理
2019/02/18 Python
详解Python3定时器任务代码
2019/09/23 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
2020/04/22 Python
Keras设置以及获取权重的实现
2020/06/19 Python
香港礼品网站:GiftU eshop
2017/09/01 全球购物
应届生的求职推荐信范文
2013/11/30 职场文书
优秀民警事迹材料
2014/01/29 职场文书
毕业生评语大全
2015/01/04 职场文书
地心历险记观后感
2015/06/15 职场文书
劳动模范获奖感言
2015/07/31 职场文书
感恩教育主题班会
2015/08/12 职场文书
MySQL复制问题的三个参数分析
2021/04/07 MySQL
MySQL 十大常用字符串函数详解
2021/06/30 MySQL