文章目录
- 前言
- node 处理 get 请求
- node 处理 post 请求
- 总结
前言
使用nodejs搭建后端代理服务,处理http请求,理解nodejs是如何处理get、post请求的
node 处理 get 请求
- 使用 http 模块创建代理服务器
- 使用 querystring 模块解析请求参数
- req.end 方法发送消息
入口文件 index.js
const http = require('http')
const queryString = require('querystring')
// 创建代理服务器
const server = http.createServer((req, res) => {
const {url} = req
console.log('request----url',url) // 打印下请求的url
req.query = queryString.parse(url.split('?')[1])
res.end(JSON.stringify(req.query)) // 对象转JSON字符串,否则发送的将会是 [object Object]
})
server.listen(3030) // 监听3030接口
console.log('3030 listening~~~')
end:写出最后的数据,并且关闭流,不使用该方法的话,客户端将默认对话并未结束并保持等待;
启动服务:
node index.js
浏览器访问url: http://localhost:3030/node/http-test?method=get&year=2023,浏览器会会发起get请求,结果如下
控制台:
通过观察浏览器的network以及打印,会发现浏览器自动发送一个路径为 /favicon.ico 的请求,这个请求是页面tab中的小图标,可以忽略
node 处理 post 请求
- 使用 http 模块创建代理服务器
- 使用 req.on 方法监听请求
- toString() 将二进制转换为字符串
入口文件 index.js
const server = http.createServer((req, res) => {
const {url, headers} = req
console.log('request----url', url)
console.log('headers----', headers)
res.setHeader('Content-type','application/json')
let data
req.on('data', chunk => {
// 二进制 => 字符串
data += chunk.toString()
})
req.on('end', chunk => {
console.log('数据接收完毕----', data)
res.end(
JSON.stringify({
data:headers,
code:200
})
)
})
})
server.listen(3030)
console.log('3030 listening~~~')
req.on:服务端以流的形式接收来自客户端的数据,on 方法对收到的数据进行监听并决定处理方式
- data: 接收到数据时触发,当传输的数据流较大时,可能会分多次接收
- end: 数据接收完毕时触发
启动服务:
node index.js
发送post请求需要借助postman工具,body中携带json数据并发送请求:
控制台:
总结
node处理http请求
- get请求
- post请求