一、http请求概述

  • DNS解析(将域名解析成一个网络IP地址)然后建立TCP连接(三次握手),最后发送htt请求。
    在这里插入图片描述

  • server接收到http请求,处理,并返回。

  • 客户端接收到返回数据,处理数据(如渲染页面,执行js)。

二、nodejs处理http请求

1、处理get请求和querystring
  • get请求,即客户端要向server端获取数据,如查询博客列表。
  • 通过querystring来获取数据,如a.html?a=100&b=200。
  • 浏览器直接访问,就发送get请求。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    const http = require('http');
    const querystring=require('querystring');

    const server = http.createServer((req, res) => {
    console.log('method: ', req.method);//获取请求方式 get

    const url=req.url//获取请求url
    console.log('url: ',url);

    //解析url后面的参数,并赋值给query
    req.query=querystring.parse(url.split('?')[1])
    console.log("query: ",req.query)

    res.end(JSON.stringify(req.query))
    });

    server.listen(8000,() => {
    console.log("listening to 8000 port")
    });
    在这里插入图片描述
    在这里插入图片描述

2、 处理post请求和post data
  • post请求,即客户端要像服务端传递数据,如新建博客。
  • 通过post data传递数据
  • 安装postman
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
const http = require('http')
const server = http.createServer((req, res) => {
if (req.method === "POST") {

//获取请求头中的数据格式
console.log('content-type', req.headers['content-type']);

//接收数据
let postData=""
/*
1)请求数据的大小是不确定的,因此采用数据流的形式
2)服务端不断接收数据,每次接收到数据时就触发data事件
*/
req.on('data', chunk => {
postData += chunk.toString()
})

//接收完数据后,触发end事件
req.on('end', () => {
console.log(postData)
res.end('hello world')
})

}
})

server.listen(8000, () => {
console.log("listening to 8000 port")
})

在这里插入图片描述
在这里插入图片描述


3、综合小案例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
const http = require('http')
const querystring = require('querystring')

const server = http.createServer((req, res) => {
//获取请求方式
const method = req.method
console.log("method: ",method)

//获取完整url
const url = req.url;
console.log("url: ",url)

//获取路由
const path = url.split('?')[0]
console.log("path: ",path)

//获取请求参数
const query = querystring.parse(url.split('?')[1])
console.log('query: ',query)

//设置返回格式为JSON
res.setHeader('content-type','application/json')

//返回的数据
const resData = {
method,
url,
path,
query
}

//GET
if(method === "GET"){
res.end(
JSON.stringify(resData)
)
}

//POST
if(method === "POST"){
//读取客户端传递过来的数据
let postData=""
req.on("data", chunk => {
postData += chunk.toString()
})
req.on("end", chunk => {
resData.postData = postData

res.end(
JSON.stringify(resData)
)
})
}

})

server.listen(3000,() => {
console.log("listening to 3000 port")
})
  • POST请求

在这里插入图片描述
在这里插入图片描述


  • GET请求
    在这里插入图片描述
    在这里插入图片描述