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 相关文章推荐
用YUI做了个标签浏览效果
Feb 20 Javascript
JavaScript arguments 多参传值函数
Oct 24 Javascript
js添加table的行和列 具体实现方法
Jul 22 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
Dec 04 Javascript
Js控制滑轮左右滑动实例
Feb 13 Javascript
详解javascript遍历方式
Nov 11 Javascript
javascript每日必学之运算符
Feb 16 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
May 27 Javascript
AngularJS中过滤器的使用与自定义实例代码
Sep 17 Javascript
javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
Sep 20 Javascript
Angular2下使用pdf插件的方法详解
Apr 29 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
星际争霸 Starcraft 游戏介绍
2020/03/14 星际争霸
php fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
2011/05/24 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
2017/09/30 PHP
PHP get_html_translation_table()函数用法讲解
2019/02/16 PHP
用javascript操作xml
2006/11/04 Javascript
一段实现页面上的图片延时加载的js代码
2010/02/11 Javascript
Extjs4 GridPanel 的几种样式使用介绍
2013/04/18 Javascript
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
2013/11/19 Javascript
利用Keydown事件阻止用户输入实现代码
2014/03/11 Javascript
jquery中each方法示例和常用选择器
2014/07/08 Javascript
JavaScript事件委托技术实例分析
2015/02/06 Javascript
jQuery+ajax简单实现文件上传的方法
2016/06/03 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
jquery实现左右滑动式轮播图
2017/03/02 Javascript
Angular2 自定义validators的实现方法
2017/07/05 Javascript
jquery鼠标悬停导航下划线滑出效果
2017/09/29 jQuery
Vue项目使用CDN优化首屏加载问题
2018/04/01 Javascript
javascript json字符串到json对象转义问题
2019/01/22 Javascript
javascript中的数据类型检测方法详解
2019/08/07 Javascript
vue.js中ref及$refs的使用方法解析
2019/10/08 Javascript
Vue引入Stylus知识点总结
2020/01/16 Javascript
[15:07]lgd_OG_m2_BP
2019/09/10 DOTA
Python中使用第三方库xlutils来追加写入Excel文件示例
2015/04/05 Python
使用python接入微信聊天机器人
2020/03/31 Python
opencv3/C++图像像素操作详解
2019/12/10 Python
python3.8与pyinstaller冲突问题的快速解决方法
2020/01/16 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
matplotlib阶梯图的实现(step())
2021/03/02 Python
照片礼物和装饰:MyPhoto
2019/11/02 全球购物
九年级语文教学反思
2014/02/04 职场文书
英语老师推荐信
2014/02/26 职场文书
Nginx本地目录映射实现代码实例
2021/03/31 Servers
JavaScript前端面试组合函数
2022/06/21 Javascript