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 相关文章推荐
服务器安全设置的几个注册表设置
Jul 28 Javascript
科讯商业版中用到的ajax空间与分页函数
Sep 02 Javascript
jQuery回调函数的定义及用法实例
Dec 23 Javascript
jQuery实现自定义checkbox和radio样式
Jul 13 Javascript
理解javascript模块化
Mar 28 Javascript
利用angular.copy取消变量的双向绑定与解析
Nov 25 Javascript
树结构之JavaScript
Jan 24 Javascript
详解JavaScript 新语法之Class 的私有属性与私有方法
Apr 23 Javascript
基于vue如何发布一个npm包的方法步骤
May 15 Javascript
Vue编程式跳转的实例代码详解
Jul 10 Javascript
解决layui页面按钮点击无反应,也不报错的问题
Sep 29 Javascript
vue postcss-px2rem 自适应布局
May 15 Vue.js
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
自己做矿石收音机
2021/03/02 无线电
AJAX for PHP简单表数据查询实例
2007/01/02 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
2017/05/02 PHP
javascript编程起步(第四课)
2007/01/10 Javascript
JS date对象的减法处理实现代码
2010/12/28 Javascript
表单元素的submit()方法和onsubmit事件应用概述
2013/02/01 Javascript
javascript打印大全(打印页面设置/打印预览代码)
2013/03/29 Javascript
JavaScript性能优化之小知识总结
2015/11/20 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
2016/01/27 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
基于cookie实现zTree树刷新后展开状态不变
2017/02/28 Javascript
详解angularJs指令的3种绑定策略
2017/04/13 Javascript
JS判断字符串是否为整数的方法--简单的正则判断
2018/07/23 Javascript
基于Vue 服务端Cookies删除的问题
2018/09/21 Javascript
TypeScript基础入门教程之三重斜线指令详解
2018/10/22 Javascript
Vue 中使用lodash对事件进行防抖和节流操作
2020/07/26 Javascript
JS JQuery获取data-*属性值方法解析
2020/09/01 jQuery
python使用筛选法计算小于给定数字的所有素数
2018/03/19 Python
python如何发布自已pip项目的方法步骤
2018/10/09 Python
Python3 关于pycharm自动导入包快捷设置的方法
2019/01/16 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
浅谈pandas dataframe对除数是零的处理
2020/07/20 Python
python自动化测试三部曲之unittest框架的实现
2020/10/07 Python
CSS3制作气泡对话框的实例教程
2016/05/10 HTML / CSS
日本土著品牌,综合型购物网站:Cecile
2016/08/23 全球购物
类如何去实现接口
2013/12/19 面试题
农民入党思想汇报
2014/01/03 职场文书
大学毕业后的十年规划
2014/01/07 职场文书
2014自主招生自荐信策略
2014/01/27 职场文书
学徒工职责
2014/03/06 职场文书
消防志愿者活动方案
2014/08/23 职场文书
优秀工作者事迹材料
2014/12/26 职场文书
2015年语文教研组工作总结
2015/05/23 职场文书
python用tkinter开发的扫雷游戏
2021/06/01 Python
Vue2项目中对百度地图的封装使用详解
2022/06/16 Vue.js