Node.js进阶之【2】 : 解析客户端GET方式传过
2020-03-17 本文已影响0人
岚平果
备注:客户端通过GET发送数据给服务端,数据大小需【<32k】,而通过POST传送数据给服务器,限制数据大小在【1G】以内
一、【手动解析】解析客户端发送到服务器的数据
- 新建一个文件夹【get】,在这个文件夹新建一个【index.html】,一个本地服务器【server.js】
【index.html】里写一个【表单GET提交】
- 新建一个文件夹【get】,在这个文件夹新建一个【index.html】,一个本地服务器【server.js】
<!DOCTYPE html>
<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>
// action后面的内容表示表单要提交到哪,method表示表单要以什么方式提交,我们这节以get方式提交数据到服务器
<form action="http://localhost:8082/aaa" method="get">
<p>姓名:<input type="text" name="name"></p>
<p>密码:<input type="password" name="pass"></p>
<p><input type="submit" value="提交"></p>
</form>
</body>
</html>
- 【server.js】里新建一个本地服务器,手动拆分数据获得客户端返回来的数据
const http = require('http');
var server = http.createServer((req, res) => {
if(req.url !== '/favicon.ico') {
let str = req.url.substring(req.url.indexOf('?') + 1); // name=xxw&pass=1234567
let arr = str.split('&'); // [ 'name=xxw', 'pass=1234567' ]
let obj = {};
arr.forEach(ele => {
let arr2 = []; // [ 'name', 'xxw' ][ 'pass', '1234567' ]
arr2 = ele.split('=');
obj[arr2[0]] = arr2[1]
})
console.log(obj) // { name: 'xxw', pass: '1234567' }
}
res.end();
})
server.listen(8082)
-
启动服务器【node server.js】,并且表单内容进行填入
image.png
-
-
上面表单点击提交之后,我们会看到服务器终端会输出经过我们手动转化的【客户端发送给服务器的数据 obj 】
image.png
-
二、【querystring.parse】解析客户端发送到服务器的数据
- 新建【querystring.js】文件,引入【querystring】模块,【querystring.parse('url')】把一个类似【name=xxl&age=12&sex=girl】转化成一个【对象】
const querystring = require('querystring')
let obj = querystring.parse('name=xxl&age=12&sex=girl')
console.log(obj)
-
启动服务器 【node querystring.js】
image.png
image.png
-
三、【url.parse】解析客户端发送到服务器的数据
- 新建一个【urlLib.js】文件,引入【url】模块,【url.parse】把网址类似【http://localhost:8082/aaa?name=xxk&pass=123456】转化成一个对象【url】
const urlLib = require('url');
// 第二个参数为ture,可以解析出我们要的数据。
- 新建一个【urlLib.js】文件,引入【url】模块,【url.parse】把网址类似【http://localhost:8082/aaa?name=xxk&pass=123456】转化成一个对象【url】
// urlLib.parse第二个参数为true,可以把query直接解析成对象 { name: 'xxk', pass: '123456' }
var obj = urlLib.parse('http://localhost:8082/aaa?name=xxk&pass=123456', true)
console.log(obj)
}
var url = obj.pathname;
var data = obj.query;
console.log(url, data) // /aaa { name: 'xxk', pass: '123456' }
-
解析明细:
image.png
-
-
应用举例:
image.png
-