nodejs——http数据解析get
数据请求
-
前台请求:form ajax jsonp
后台相同 -
前台< - >后台 通过 http 协议进行交互
-
请求方式:
- GET 数据在url中
- POST 数据不在url
-
前台于后台交互数据通过所谓的“消息”传播,一个消息又分两部分:header与content。
- header: 包括url和头信息
- content: post数据
GET
- 以下是一个包含表单的 html,我们在用户输入 bbb,密码输 123;
<form action="http://localhost:8080/aaa"method:"get"> 用户:<input type="text" name="user" value=""><br> 密码:<input type="password" name="pass" value=""><br> <input type="submit" value="提交"> </form>
- js 代码:根据上述表单输入规则输入后
req.url
变为/aaa?user=bbb&pass=123
const http = require('http');//引进模块 http.createServer(function (req, res) { var GET = {}; if (req.url.indexOf('?')!= -1) { //判断请求的url有无? //res.url为/aaa?user=bbb&pass=123 var arr = req.url.split('?'); //arr[0]地址:/aaa //arr[1]数据:user=bbb&pass=123 var url = arr[0]; var arr2 = arr[1].split('&'); //arr2=>["user=bbb","pass=123"] for (var i = 0; i < arr2.length; i++) { var arr3 = arr2[i].split('='); GET[arr3[0]] = arr3[1]; } }else{ url = req.url;//若没有'?'则为url } console.log(url,GET); res.end(); }).listen(8080);
Query Strings模块解析数据字符串
const querystring = require('querystring');
var json = querystring.parse("user=bbb&pass=123&age=18");
console.log(json);//[user:bbb,pass:123,age:18]
既然Query String有此种功能,那么我们上文中js处理字符串的代码就可以得到简化。如下
const http = require('http');//引进模块
const querystring = require('querystring');
http.createServer(function (req, res) {
var GET = {}; if (req.url.indexOf('?')!= -1) {
var arr = req.url.split('?');
//res.url为/aaa?user=bbb&pass=123
//arr[0]地址:/aaa
//arr[1]数据:user=bbb&pass=123
var url = arr[0];
GET = querystring.parse(arr[1]);
}else{
url = req.url;
} console.log(url,GET);
res.end();
}).listen(8080);
url模块解析整个url地址
const urlLib = require('url');
var obj = urlLib.parse("http://www.baidu.com/index?a=1&b=2",true);
console.log(obj);
运行结果如下:
观察上面截图,发现,最有用的数据有pathname和query。然后我们用url模块改写例子代码。
const http = require('http');//引进模块
const urlLib = require('url');
http.createServer(function (req, res) {
var obj = urlLib.prase(res.url,true);//特别强调这个true参数必须写,GET才能解析为{a:'1';b:'2'}
var url = obj.pathname;
var GET = OBJ.query;
console.log(url,GET);
res.end();
}).listen(8080);