nodeJS中的http模块基本介绍
  # http模块
# 创建服务器基本步骤
//1. 导入http模块,http模块是node的核心模块,作用是用来创建http服务器的。
var http = require("http");
 
//2. 创建服务器
var server = http.createServer();
 
//3. 服务器处理请求
server.on("request", function() {
  console.log("我接收到请求了");
});
 
//4. 启动服务器,监听某个端口
server.listen(9999, function(){
  console.log("服务器启动成功了, 请访问: http://localhost:9999");
});
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
详细说明:
- 给服务器注册request事件,只要服务器接收到了客户端的请求,就会触发request事件
 - request事件有两个参数,request表示请求对象,可以获取所有与请求相关的信息,response是响应对象,可以获取所有与响应相关的信息。
 - 服务器监听的端口范围为:1-65535之间,推荐使用3000以上的端口,因为3000以下的端口一般留给系统使用
 
# request对象详解
文档地址:http://nodejs.cn/api/http.html#http_message_headers (opens new window)
常见属性:
- headers: 所有的请求头信息
 - method: 请求的方式
 - url: 请求的地址
 
注意
注意:在发送请求的时候,可能会出现两次请求的情况,这是因为谷歌浏览器会自动增加一个favicon.ico的请求。
小结:request对象中,常用的就是method和url两个参数
# response对象详解
文档地址:http://nodejs.cn/api/http.html#http_class_http_serverresponse (opens new window)
常见的属性和方法:
- res.write(data): 给浏览器发送请求体,可以调用多次,从而提供连续的请求体
 - res.end(); 通知服务器,所有响应头和响应主体都已被发送,即服务器将其视为已完成。
 - res.end(data); 结束请求,并且响应一段内容,相当于res.write(data) + res.end()
 - res.statusCode: 响应的的状态码 200 404 500
 - res.statusMessage: 响应的状态信息, OK Not Found ,会根据statusCode自动设置。
 - res.setHeader(name, value); 设置响应头信息, 比如content-type
 - res.writeHead(statusCode, statusMessage, options); 设置响应头,同时可以设置状态码和状态信息。
 
注意
注意:必须先设置响应头,才能设置响应。
# 实现静态WEB服务器
# 服务器响应首页
注意
注意:浏览器中输入的URL地址,仅仅是一个标识,不与服务器中的目录一致。也就是说:返回什么内容是由服务端的逻辑决定
server.on('request', function(req, res) {
  var url = req.url
  if(url === '/') {
    fs.readFile('./index.html', function(err, data) {
      if(err) {
        return res.end('您访问的资源不存在~')
      }
  
      res.end(data)
    })
  }
})
 1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 根据根据不同url,响应不同文件
content-type设置-MIME类型
MIME(Multipurpose Internet Mail Extensions)多用途Internet邮件扩展类型 是一种表示文档性质和格式的标准化方式 浏览器通常使用MIME类型(而不是文件扩展名)来确定如何处理文档;因此服务器将正确的MIME类型附加到响应对象的头部是非常重要的 MIME 类型
# 静态资源的通用处理
MIME类型的通用处理-mime模块
- 作用:获取文件的MIME类型
 - 安装:npm i mime 引入mime:
 
var mime = require('mime')
  
// 获取路径对应的MIME类型
mime.getType('txt')                    // ⇨ 'text/plain'
// 根据MIME获取到文件后缀名
mime.getExtension('text/plain')        // ⇨ 'txt'
const http = require('http')
const fs = require('fs')
const path = require('path')
const mime = require('mime')
http.createServer((req, res) => {
	// 只需要判断 url是否以 /www开始
	const url = req.url
	if (url.startsWith('/www')) {
		// 直接读取文件
		const filePath = path.join(__dirname, url)
		fs.readFile(filePath, (err, data) => {
			if (err) {
				// 响应404
				res.statusCode = 404
				res.end('404')
			} else {
				// 设置mime类型
				res.setHeader('content-type', mime.getType(url))
				// 响应数据
				res.end(data)
			}
		})
	} else {
		res.statusCode = 404
		res.end('404')
	}
}).listen(9999, () => {
	console.log('服务器启动成功了')
})
 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
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
上次更新: 2024/02/20, 17:31:36