来源:Node.js

http

http模块是Nodejs中用于创建和处理HTTP服务器和客户端的核心模块,基于OSI七层模型的应用层

它使得构建基于HTTP协议的应用程序变得更加简单和灵活,例如

  • 创建Web服务器:能提供Web应用程序或网站,通过监听特定的端口,服务器可以接收客户端的请求,并生成响应,通过处理不同的路由、请求方法和参数,可以实现自定义的业务逻辑
  • 构建RESTful API:可以使用HTTP请求方法(如GET、POST、PUT、DELETE等)和路径来定义API的不同端点,通过解析请求参数、验证身份和权限,以及生成相应的JSON或其他数据格式,可以构建强大的API服务
  • 代理服务器:创建代理服务器转发客户端的请求到其他服务器,可用于负载均衡、缓存、安全过滤或跨域请求等场景,通过在代理服务器上添加逻辑,可以对请求和响应进行修改、记录或过滤
  • 文件服务器:可以创建一个简单的文件服务器,提供静态文件(如 HTML、CSS、JavaScript、图像等),读取文件并将其作为响应发送给客户端

使用

原生Nodejs创建服务复杂,所以实际开发会使用框架

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
const http = require('node:http')
const url = require('node:url')

// 创建一个HTTP服务
// req:接收到的前端的信息 res:返回给前端的信息
http.createServer((req, res) => {

// req.url 获取请求路径,使用url解析
// 第二个参数为true,可以解析query
const { pathname, query } = url.parse(req.url, true)
console.log(pathname, query)

// req.method 获取请求方法
if(req.method === 'POST'){
// 可以用pathname来区分不同的请求
if(pathname === '/login'){
// 前端传来的数据是流式的,需要用data事件监听
let data = ''
req.on('data', chunk => {
data+=chunk
})

// 如果匹配到且没有错误,可以返回200
req.on('end', () => {
res.setHeader('Content-Type', 'application/json')
res.statusCode = 200
res.end(data)
})

} else {
// 如果没有匹配到,可以返回404
res.statusCode = 404
res.end('Not Found')
}
}

else if(req.method === 'GET'){

if(pathname === '/get') {
res.end('Hello World')
} else {
res.statusCode = 404
res.end('Not Found')
}


}
}).listen(11451, ()=> console.log('Server running at http://127.0.0.1:11451/')) // 传输层所需的端口号,小于65535都是可以的