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中的数学函数
Apr 04 Javascript
Jquery中children与find之间的区别详细解析
Nov 29 Javascript
javascript 按键事件(兼容各浏览器)
Dec 20 Javascript
JS实现的不规则TAB选项卡效果代码
Sep 18 Javascript
javascript发送短信验证码实现代码
Nov 12 Javascript
javascript数组克隆简单实现方法
Dec 16 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
May 17 Javascript
ActiveX控件的使用-js实现打印超市小票功能代码详解
Nov 22 Javascript
微信小程序多音频播放进度条问题
Aug 28 Javascript
node爬取新型冠状病毒的疫情实时动态
Feb 06 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
Apr 16 Javascript
vue+elementui实现点击table中的单元格触发事件--弹框
Jul 18 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动态创建Flash动画
2006/10/09 PHP
计算2000年01月01日起到指定日的天数
2006/10/09 PHP
php函数间的参数传递(值传递/引用传递)
2013/09/23 PHP
php生成不重复随机数、数组的4种方法分享
2015/03/30 PHP
php递归调用删除数组空值元素的方法
2015/04/28 PHP
php自动加载方式集合
2016/04/04 PHP
PHP使用curl函数发送Post请求的注意事项
2016/11/26 PHP
Laravel 批量更新多条数据的示例
2017/11/27 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
鼠标放在图片上显示大图的JS代码
2013/03/26 Javascript
解析jQuery与其它js(Prototype)库兼容共存
2013/07/04 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
深入理解JavaScript单体内置对象
2016/06/06 Javascript
使用ES6语法重构React代码详解
2017/05/09 Javascript
JavaScript之underscore_动力节点Java学院整理
2017/07/03 Javascript
Vue父子组件之间的通信实例详解
2018/09/28 Javascript
Vue实现移动端左右滑动效果的方法
2018/11/27 Javascript
微信小程序在线客服自动回复功能(基于node)
2019/07/03 Javascript
如何基于JavaScript判断图片是否加载完成
2019/12/28 Javascript
springboot+vue实现文件上传下载
2020/11/17 Vue.js
Django后台获取前端post上传的文件方法
2018/05/28 Python
使用python爬取抖音视频列表信息
2019/07/15 Python
python base64库给用户名或密码加密的流程
2020/01/02 Python
python 基于opencv实现图像增强
2020/12/23 Python
纯CSS3代码实现switch滑动开关按钮效果
2016/08/30 HTML / CSS
利用Bootstrap实现漂亮简洁的CSS3价格表实例源码
2017/03/02 HTML / CSS
Timberland俄罗斯官方网上商店:全球领先的户外品牌
2020/03/15 全球购物
信息专业个人的自我评价
2013/12/27 职场文书
2014全国两会学习心得体会1000字
2014/03/10 职场文书
学校运动会广播稿
2014/10/11 职场文书
贫困证明书格式及范文
2014/10/15 职场文书
小学教师先进事迹材料
2014/12/15 职场文书
毕业典礼邀请函
2015/01/31 职场文书
2015年乡镇科普工作总结
2015/05/13 职场文书