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 相关文章推荐
JavaScript 私有成员分析
Jan 13 Javascript
理解JavaScript的caller,callee,call,apply
Apr 28 Javascript
Jquery实现兼容各大浏览器的Enter回车切换输入焦点的方法
Sep 01 Javascript
javascript实现日期格式转换
Dec 16 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
Mar 12 Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
Dec 09 Javascript
原生javascript实现的一个简单动画效果
Mar 30 Javascript
AngularJS ng-blur 指令详解及简单实例
Jul 30 Javascript
vue+element-ui实现表格编辑的三种实现方式
Oct 31 Javascript
vue设计一个倒计时秒杀的组件详解
Apr 06 Javascript
vue.js实现双击放大预览功能
Jun 23 Javascript
JavaScript 实现轮播图特效的示例
Nov 05 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
php5.5中类级别的常量使用介绍
2013/10/02 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
Flash+XML滚动新闻代码 无图片 附源码下载
2007/11/22 Javascript
javascript 操作Word和Excel的实现代码
2009/10/26 Javascript
jQuery前台数据获取实现代码
2011/03/16 Javascript
js确定对象类型方法
2012/03/30 Javascript
JS实现时间格式化的方式汇总
2013/10/16 Javascript
JavaScript调用客户端的可执行文件(示例代码)
2013/11/28 Javascript
关于Javascript作用域链的八点总结
2013/12/06 Javascript
jquery获得option的值和对option进行操作
2013/12/13 Javascript
jquery遍历select元素(实例讲解)
2013/12/31 Javascript
jquery复选框checkbox实现删除前判断
2014/04/20 Javascript
超赞的动手创建JavaScript框架的详细教程
2015/06/30 Javascript
jQuery实现仿百度帖吧头部固定导航效果
2015/08/07 Javascript
jQuery实现网页抖动的菜单抖动效果
2015/08/07 Javascript
JQuery控制DIV的选取实现方法
2016/09/18 Javascript
easyui中combotree循环获取父节点至根节点并输出路径实现方法
2016/11/10 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
Web前端开发之水印、图片验证码
2016/11/27 Javascript
webpack配置导致字体图标无法显示的解决方法
2018/03/06 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
浅谈vue中$bus的使用和涉及到的问题
2020/07/28 Javascript
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
Python映射拆分操作符用法实例
2015/05/19 Python
一篇文章快速了解Python的GIL
2018/01/12 Python
python 实现仿微信聊天时间格式化显示的代码
2020/04/17 Python
美国知名的旅游网站:OneTravel
2018/10/09 全球购物
《雪地里的小画家》教学反思
2014/02/22 职场文书
人力资源管理专业应届生求职信
2014/04/24 职场文书
啦啦队口号大全
2014/06/16 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
2014年预算员工作总结
2014/12/05 职场文书
2014年工作总结及2015工作计划
2014/12/12 职场文书