Node.js querystring模块详解:GET与POST数据处理实战

作者:夜航船

时间:2026-10-23

浏览:538

本文深入解析Node.js中querystring模块的核心功能,涵盖parse与stringify方法的参数配置、自定义分隔符及编码处理。通过代码示例演示如何解析GET请求URL参数,以及利用data和end事件拼接处理POST缓冲区数据,帮助开发者掌握Node.js中获取和处理HTTP请求数据的标准实践。

文章目录

在前端与后端开发中,处理URL参数是常见应用场景。Node.js提供的querystring模块专门用于处理查询字符串(query strings)。本文将对该模块的功能进行详细解析。


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。因此,obj.toString()、obj.hasOwnProperty()等典型Object方法未定义且不可用。

默认情况下,查询字符串中的百分号编码字符被视为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()是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.stringify()内部使用,通常不直接调用。其对外开放旨在允许用户通过赋值自定义函数来重写编码实现。


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.parse()内部使用,通常不直接调用。其对外开放旨在允许用户通过赋值自定义函数来重写解码实现。

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数据的文章请点击下面的相关链接

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章