文章目录
1. 关键知识点简介
- GET请求用url模块的parse方法解析request.url获取参数
- POST请求用request.on监听数据的接收,因为post数据是多段分发的,不像GET请求直接发送一段字符串,post数据是异步接收的,我们必须等到post数据接收完成之后再进行处理。
2. 本文最终的目录结构
windows、linux如何自动生成目录结构:点击查看
│ get.js ----------- 处理get请求
│ index.js ----------- 用户注册登录验证案例
│ post.js ----------- 处理post请求
│ postGet.js ----------- 同时处理get和post请求
│ staticServer.js ----------- 静态服务器模块
│
├─public ----------- 存放mime.json
│ mime.json
│
└─static ----------- 静态文件根目录
form.html ----------- form表单:用户注册(POST方式)
form1.html ----------- form表单:用户登录(GET方式)
postGet.html ---------- form表单(GET和POST数据同时发送)
index.css
index.html ----------- 用户登录注册首页(ajax发送)
index.js
jquery-3.1.1.min.js
post.html ----------- post.js所需的表单
这里不会讲解node静态服务器的搭建,如果想学习请看我上一篇文章:Node之搭建静态服务器
3. 处理GET请求
新建一个get.js文件:
const http = require('http');
const url = require('url');
http.createServer( (req, res) => {
if(req.url === '/favicon.ico') {
res.end();
return
}
console.log("req.url === > ", req.url);
// get 数据处理
console.log(url.parse(req.url))
let {
query:{
a, b} } = url.parse(req.url, true);
console.log("a === ", a);
console.log("b === ", b);
res.end("{code: 0}");
}).listen(8080, ()=>{
console.log('running...');
})
node get启动服务器,在网页访问 http://localhost:8080/?a=1&b=2 ,服务端打印结果如下:
可以看到,request.url是查询字符串,而url.parse(request.url)将查询字符串转换成对象的形式,最后我们想要的是对象里边的query属性,因此我们用ES6的对象解构语法将参数a和参数b给解构出来。不熟悉ES6请看:ES6学习地址
因此,get数据的处理就是通过url模块的parse方法,将字符串转换成对象,再通过query属性拿到参数。
4. 处理POST请求
新建一个post.js文件:
const http = require('http');
const querystring = require('querystring');
http.createServer( (req, res) => {
if(req.url === '/favicon.ico') {
res.end();
return
}
console.log("req.url === > ", req.url);
// post 数据处理
let str = '';
req.on('data', chunk => {
str += chunk //数据拼接
})
req.on('end', () => {
console.log("post数据接收完毕");
let {
a, b} = querystring.parse(str);
console.log('a====>',a);
console.log('b====>',b);
})
res.end("{code: 0}");
}).listen(8080, ()=>{
console.log('running...');
})
static文件夹下,新建一个post.html文件,用来模拟post数据发送:
<!--body内容-->
<form method="POST