这期学习在node.js中内置模块的http模块
目录
1.http实例,用终端运行js文件之后,在浏览器输入127.0.0.1.2020(端口)可以收到服务器端响应的事务
一、定义
http 模块是Node.js官方提供的、用来创建 web 服务器的模块,通过 http模块提供的 http.createServer()方法,就能方便的把一台普通的电脑,变成一台Web服务器,从而对外提供Web资源服务。
简单来说就是把自己电脑创建成一个 HTTP 服务器,该服务器侦听服务器端口并将响应返回给客户端。
二、服务器
在学习http模块之前,首先我们要了解一下“服务器”
IP 地址
IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异
在我们每台电脑上都存在一个IP地址,这个IP地址是唯一的,而且是能标明电脑内的一串数字。
IP地址的格式通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是 0~255 之间的十进制整数。例如:用点分十进表示的iP地址(192.168.1.1)
域名和域名服务器
域名(Domain name)是互联网基础架构的关键部分。它们为互联网上任何可用的 Web 服务器提供了方便人类理解的地址。
DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。
域名其实就是为了方便理解人们发明的有一种字符型的地址方案,而域名服务器就是将域名与唯一性质的IP地址进行联系,域名服务器就是提供 IP地址和域名之间的转换服务的服务器
端口号
所谓的端口,就时客户端可以通过ip地址找到对应的服务器端,但是服务器端是有很多端口的,每个应用程序对应一个端口号,通过端口号,客户端才能真正的访问到该服务器。为了对端口进行区分,将每个端口进行了编号,这就是端口号
每个web服务都对应一个唯一的端口号,客户端发送过来的网络请求,通过端口号,可以被准确地交给对应的web服务进行处理
三、创建基本的服务器
导入http模块
首先导入http模块,作为node.js的内置模块出现
const http = require('http')
通过http模块创建一个web服务器实例
使用createServer()
方法创建HTTP服务器,该服务器开始侦听服务器端口并将响应返回给客户端。
在我们的示例中,我将HTTP服务器命名为app
const app = http.createServer()
http.Server的事件
http.Server 是一个基于事件的服务器,继承自 EventEmitter。http.Server 提供的事件如下所示:
request
当客户端请求到来时,该事件被触发,提供两个参数req和res,表示请求和响应信息,是最常用的事件。
为服务器绑定请求request事件,监听客户端的请求
request事件语法如下:
app.on('事件类型', 回调函数)
例如:
app.on('request', (req, res) => {})
其中:只要有客户端来请求我们自己的服务器,就会触发 request 事件,从而调用这个事件处理函数,req是请求对象,里面存储着客户端的请求信息,会返回请求的一些数据,res是响应对象,里面存储着服务器的响应信息
服务器返回响应
res.end('')
设置内容格式:当调用res.end()方法,向客户端发送中文内容的时候,会出现乱码问题,此时,需要手动设置内容的编码格式
res.setHeader('Content-Type', 'text/html;charset=utf-8')
connection
当TCP连接建立时,该事件被触发,提供一个参数socket,是net.Socket的实例。
close
当服务器关闭时,触发事件(注意不是在用户断开连接)
启动服务,并且说明端口号
app.listen(端口号,回调函数)
四、实例
1.http实例,用终端运行js文件之后,在浏览器输入127.0.0.1.2020(端口)可以收到服务器端响应的事务
// 引入 http 模块
const http = require('http')
// 创建一个 HTTP 服务器实例
const app = http.createServer()
// 监听 request 事件,当有请求到达时执行回调函数
app.on('request', (req, res) => {
// 打印请求的 URL 和方法
console.log(`请求地址是${req.url}。请求方式是${req.method}`)
// 设置响应头,指定内容类型为 HTML,字符编码为 UTF-8
res.setHeader('Content-Type', 'text/html;charset=utf-8')
// 向客户端发送响应,内容与请求的 URL 和方法相同
res.end(`请求地址是${req.url}。请求方式是${req.method}`)
})
// 服务器启动,监听 2020 端口,启动成功后在控制台输出提示信息
app.listen(2020, () => {
console.log('服务器启动成功了~')
})
2.根据不同的url打开不同的网页
// 引入 http 模块
const http = require('http')
// 创建一个 HTTP 服务器实例
const app = http.createServer()
// 监听 request 事件,当有请求到达时执行回调函数
app.on('request', (req, res) => {
// 设置响应头,指定内容类型为 HTML,字符编码为 UTF-8
res.setHeader('content-type', 'text/html;charset=utf-8')
// 根据请求的 URL 发送不同的响应内容
if (req.url === '/' || req.url === '/index') {
// 如果请求的是根路径或 /index,发送 '首页' 作为响应
res.end('首页')
} else if (req.url === '/about') {
// 如果请求的是 /about,发送 '关于我们' 作为响应
res.end('关于我们')
} else {
// 如果请求的是其他路径,发送 '404 页面跑丢了' 作为响应
res.end('404 页面跑丢了')
}
})
// 服务器启动,监听 3030 端口,启动成功后在控制台输出提示信息
app.listen(3030, () => {
console.log('启动');
})