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代码
Sep 07 Javascript
Javascript与vbscript数据共享
Jan 09 Javascript
JAVASCRIPT  THIS详解 面向对象
Mar 25 Javascript
jQuery中before()方法用法实例
Dec 25 Javascript
快速掌握Node.js环境的安装与运行方法
Feb 16 Javascript
jQuery文字横向滚动效果的实现代码
May 31 Javascript
VUEJS实战之修复错误并且美化时间(2)
Jun 13 Javascript
JS 事件绑定、事件监听、事件委托详细介绍
Sep 28 Javascript
快速解决js开发下拉框中blur与click冲突
Oct 10 Javascript
js实现无缝滚动图
Feb 22 Javascript
基于EasyUI的基础之上实现树形功能菜单
Jun 28 Javascript
es6中new.target的作用和使用场景简单示例分析
Mar 14 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
杏林同学录(九)
2006/10/09 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
JS中style属性
2006/10/11 Javascript
菜鸟javascript基础资料整理2
2010/12/06 Javascript
JS对象与JSON格式数据相互转换
2012/02/20 Javascript
ExtJS4中使用mixins实现多继承示例
2013/12/03 Javascript
JS简单编号生成器实现方法(附demo源码下载)
2016/04/05 Javascript
深入浅析Vue组件开发
2016/11/25 Javascript
纯js实现倒计时功能
2017/01/06 Javascript
JS高仿抛物线加入购物车特效实现代码
2017/02/20 Javascript
javascript实现非常简单的小数取整功能示例
2017/06/13 Javascript
详谈commonjs模块与es6模块的区别
2017/10/18 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
jQuery HTML css()方法与css类实例详解
2020/05/20 jQuery
jquery实现抽奖功能
2020/10/22 jQuery
Python删除指定目录下过期文件的2个脚本分享
2014/04/10 Python
Python获取脚本所在目录的正确方法
2014/04/15 Python
Python实现的Kmeans++算法实例
2014/04/26 Python
浅谈python对象数据的读写权限
2016/09/12 Python
详解python实现读取邮件数据并下载附件的实例
2017/08/03 Python
python实现冒泡排序算法的两种方法
2018/03/10 Python
django如何连接已存在数据的数据库
2018/08/14 Python
python实现小球弹跳效果
2019/05/10 Python
python自定义时钟类、定时任务类
2021/02/22 Python
python的pyecharts绘制各种图表详细(附代码)
2019/11/11 Python
Python xlrd excel文件操作代码实例
2020/03/10 Python
python中使用np.delete()的实例方法
2021/02/01 Python
CSS3轻松实现清新 Loading 效果的简单实例
2016/06/06 HTML / CSS
CSS3使用transition实现的鼠标悬停淡入淡出
2015/01/09 HTML / CSS
创业计划书六个要素
2013/12/26 职场文书
期中考试后的反思
2014/02/08 职场文书
成语的广告词
2014/03/19 职场文书
毕业寄语大全
2014/04/09 职场文书
初中学校军训方案
2014/05/09 职场文书
学生夜不归宿检讨书
2014/09/23 职场文书
Python中os模块的简单使用及重命名操作
2021/04/17 Python