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解密入门之凭直觉解
Jun 25 Javascript
javascript parseInt 大改造
Sep 27 Javascript
关于javascript function对象那些迷惑分析
Oct 24 Javascript
基于jquery跨浏览器显示的file上传控件
Oct 24 Javascript
jqGrid增加时--判断开始日期与结束日期(实例解析)
Nov 08 Javascript
JavaScript中constructor()方法的使用简介
Jun 05 Javascript
js实现汉字排序的方法
Jul 23 Javascript
jQuery文字提示与图片提示效果实现方法
Jul 04 Javascript
JavaScript登录验证码的实现
Oct 27 Javascript
jQuery中table数据的值拷贝和拆分
Mar 19 Javascript
源码分析Vue.js的监听实现教程
Apr 23 Javascript
iview给radio按钮组件加点击事件的实例
Sep 30 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遍历二维数组的代码
2011/04/22 PHP
php操作JSON格式数据的实现代码
2011/12/24 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
2014/06/24 PHP
微信公众平台开发之天气预报功能
2015/08/31 PHP
Jquery CheckBox全选方法代码附js checkbox全选反选代码
2010/06/09 Javascript
javascript克隆对象深度介绍
2012/11/20 Javascript
JS判断、校验MAC地址的2个实例
2014/05/05 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
2014/10/17 Javascript
weUI应用之JS常用信息提示弹层的封装
2016/11/21 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
es6新特性之 class 基本用法解析
2018/05/05 Javascript
vue中的适配px2rem示例代码
2018/11/19 Javascript
图文讲解vue的v-if使用方法
2019/02/11 Javascript
深入了解JavaScript 私有化
2019/05/30 Javascript
websocket4.0+typescript 实现热更新的方法
2019/08/14 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
JS使用正则表达式判断输入框失去焦点事件
2019/10/16 Javascript
JavaScript代码异常监控实现过程详解
2020/02/17 Javascript
[43:24]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS Liquid
2018/03/30 DOTA
[01:45:05]VGJ.T vs Newbee Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
Python实现的Google IP 可用性检测脚本
2015/04/23 Python
python 网络爬虫初级实现代码
2016/02/27 Python
Python实现的文本编辑器功能示例
2017/06/30 Python
同时安装Python2 &amp; Python3 cmd下版本自由选择的方法
2017/12/09 Python
将pip源更换到国内镜像的详细步骤
2019/04/07 Python
Python(PyS60)实现简单语音整点报时
2019/11/18 Python
python实现批处理文件
2020/07/28 Python
Europcar意大利:汽车租赁
2019/07/07 全球购物
Brother加拿大官网:打印机、贴标机、缝纫机
2019/10/09 全球购物
神路信息Java面试题目
2013/03/31 面试题
主键(Primary Key)约束和唯一性(UNIQUE)约束的区别
2013/05/29 面试题
应聘面试自我评价
2014/01/24 职场文书
幼儿园元旦活动感言
2014/03/02 职场文书
2014光棍节大学生联谊活动方案
2014/10/10 职场文书
2014年教育工作总结
2014/11/26 职场文书
详解Python 3.10 中的新功能和变化
2021/04/28 Python