Bootstrap

学习Node.js中的http模块

这期学习在node.js中内置模块http模块

目录

一、定义

二、服务器

IP 地址

域名和域名服务器

端口号

三、创建基本的服务器

导入http模块

通过http模块创建一个web服务器实例

http.Server的事件

 request

为服务器绑定请求request事件,监听客户端的请求

 服务器返回响应

 connection

 close

启动服务,并且说明端口号

四、实例

1.http实例,用终端运行js文件之后,在浏览器输入127.0.0.1.2020(端口)可以收到服务器端响应的事务

2.根据不同的url打开不同的网页


一、定义

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('启动');
})

;