querystring模块的一些函数用于解析与格式化url查询字符串,与其他类一样,使用
require(“querystring”)引入。
为什么要用Query String工具
1.使用安全的字符表示不安全的字符,如中文,某些特殊的字符等。这样的话不管是浏览器环境,或者服务器环境,传输的数据都是安全的,可以正确地使用,不会出现数据的丢失或显示错误的情况
2.消除一些有歧义的字符,举个例子,你想通过一个参数data传输’&a=1&b=1&c=1’这几个字符,如果这样写
data=&a=1&b=1&c=1 // 服务器解析的时候实际是四个参数:data,a,b,c
但如果通过querystring处理,它就是下面这种情况
data=%26a%3D1%26b%3D1%26c%3D1 // 安全传输data
所以在处理查询参数的时候使用querystring是很有必要的,使用之前首先要引用它:
const querystring = require("querystring");
import querystring from "querystring"; //es6 也可以这样写,这两种方式都可以
-
下面先定义一个对象obj使用stringify将对象转成字符串,在使用parse将字符串转成对象。
stringify传一个参数
var querystring = require("querystring");
var obj = {name:"张三",age:25,height:"180cm"};
// 对象转字符串
var res = querystring.stringify(obj);
console.log(res);
// 字符串转对象
var newobj = querystring.parse(res);
console.log(newobj);
2.unescape方法是将乱码转换成正常的汉字,这个还挺实用的,在url地址栏上的参数传汉字时,经常是一串被编译过的乱码,使用unescape就解析乱码
var res = querystring.stringify(obj);
console.log(res);
// 乱码转换
var res1 = querystring.unescape(res);
console.log(res1);
**3.stringify传两个参数,**将对象转换成字符串,第二个参数代表以什么链接字符串;parse传两个参数,将字符串变成数组,第二个参数代表以什么切割字符串。
如下例以*为例
// 以*连接
var data = querystring.stringify(obj,"*");
console.log(data);
// 以*分割,将字符串变成对象
var result = querystring.parse(data,"*");
console.log(result);
4.stringify传三个参数时
第一个参数:对象;
第二个参数:将连接符换成第二个参数的值
第三个参数:将对象的键名与键值用第三个参数的值链接
下例:就是把连接符替换成*,键名与键值用?链接
// 连接符*,等号换成?
var data1 = querystring.stringify(obj,"*","?");
console.log(data1);
5.escape将汉字转换成乱码的编码格式
var str = "你好";
var newstr = querystring.escape(str);
console.log(newstr);
实例
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<form action="http://localhost:3000/demo/123/4567" method="get">
username <input type="text" name="user" value=""><br>
password <input type="password" name="password" value=""><br>
<input type="submit" value="send">
</form>
</body>
</html>
form表单发送数据给
http://localhost:3000/demo/123/4567
然后后台加以响应
const http = require("http");
//querystring模块可以帮助我们解析字符串
//但是只能解析类似“user=abc&password=123”这样的
//如果前面有问号,是不能顺利解析的
const querystring = require("querystring");
var server = http.createServer(function(req , res){
//声明一个GET变量,存放解析好的数据
var GET = {};
//如果url中有“?”说明有请求地址和提交数据
if(req.url.indexOf("?") != -1){
//等号前和等号后需分成两个数组
//这样querystring才可以正常工作
var arr = req.url.split("?");
var url = arr[0];
//用querystring解析,返回一个键值对,赋值给GET
GET = querystring.parse(arr[1]);
}else{//如果没有“?”,则说明之请求了一个地址
var url = req.url;
}
//输出url地址和GET数据
console.log(url , GET);
res.write(url);
res.end();
});
server.listen(3000 , function(err){
if(!err){
console.log("Server is listening 3000 port...");
}else{
console.log(err);
}
});
最后输出的结果为
/demo/123/4567 { user: 'sfddfs', password: 'dasdsad' }
/favicon.ico {}