http模块【Node.js内置模块其一】
以下文件均由
node 文件命.js
启动
一、 介绍
1、 http模块 :
- 客户端 : 网络节点中,负责消费资源的电脑
- 服务器 : 负责对外提供网络资源的电脑
2、 http模块是Node.js官方提供的、用来创建web服务器的模块。
- 通过http模块提供的
http.createServer()
方法,可以方便地将一台普通的电脑,变成一台服务器,提供Web资源服务
3、 服务器和普通电脑的区别 :
- 服务器上安装了web服务器软件,例如:IIS/Apache等
- 通过安装这些服务器软件,将一台普通电脑变成web服务器
二、 服务器相关 – IP
1、 IP地址 : 互联网上每台计算机的唯一地址,因此IP地址具有唯一性。
- 类似于 : 只有知道其电话号码,才能进行数据通信
2、 IP地址的格式 :
-
“点分十进制”表示成(a.b.c.d)的形式
-
a~d 都是 0-255 之间的十进制整数
3、
-
互联网中每台Web服务器,都有自己的IP地址
-
终端运行
ping www.baidu.com
命令,即可查看百度服务器的IP地址
-
127.0.0.1
,客户端 + 服务器
三、 服务器相关 – 域名
1、
IP 《=》 身份证
域名 《=》 名字
2、 IP地址和域名
- IP地址和域名是一一对应的关系
- 对应关系存放在一种叫做域名服务器(
DNS,Domain name server
)的电脑中 - 需通过好记得域名访问对应得服务器即可,对应的转换工作由域名服务器实现
- 域名服务器就是提供IP地址和域名之间的转换服务的服务器
- 127.0.0.1的域名是 localhost
四、 服务器相关 – 端口号
1、 端口号 : 现实生活中的门牌号一样
2、 一台电脑中,可以运行成百上千的web服务
- 每个web服务都对应一个唯一的端口号
- 客户端发送的网络请求,通过端口号,可以准确交给对应的web服务进行 处理
3、
- 80 端口可以被省略
五、 创建最基本的web服务器
1、 创建web服务器的基本步骤 :
- 导入http模块
- 创建web服务器实例
- 为服务器实例绑定request事件,监听客户端的请求
- 启动服务器
- 调用服务器实例的.listen() 方法,即可启动当前的web服务器实例
-
// 1. 导入http模块 const http = require('http'); // 2. 创建web服务器实例 const server = http.createServer(); // 3.1 为服务器实例绑定request事件,监听客户端的请求 // 3.2 使用服务器实例的.on()方法,为服务器绑定一个 request 事件 server.on('request', (req, res) => { // 3.3 只要有客户端来请求我们自己的服务器,就会触发request事件,从而调用这个事件处理函数 console.log('Someone visit our web server'); }) // 4.1 调用服务器实例的.listen() 方法,即可启动当前的web服务器实例 server.listen(80, () => { console.log('http server running at http://127.0.0.1'); })
5-1 了解req请求对象
1、 req请求对象 :
- 只要服务器接收到了客户端的请求,就会调用通过
server.on()
为服务器绑定的request事件处理函数
2、 如果想在事件处理函数中,访问与客户端相关的数据或属性:
const http = require('http')
const server = http.createServer()
// req是请求对象,包含了与客户端相关的数据和属性
server.on('request', (req) => {
// req.url 是客户端请求的URL地址
const url = req.url
// req.method 是客户端请求的method类型
const method = req.method
const str = `Your request url is ${url},and request method is ${method}`
console.log(str);
})
server.listen(80, () => {
console.log('http server running at http://127.0.0.1');
})
3、 浏览器默认get请求
5-2 res响应对象
-
res响应对象
-
在服务器request 事件处理函数中,想访问与服务器相关的数据或属性:
const http = require('http') const server = http.createServer() // req是请求对象,包含了与客户端相关的数据和属性 server.on('request', (req, res) => { // req.url 是客户端请求的URL地址 const url = req.url; // req.method 是客户端请求的method类型 const method = req.method; const str = `Your request url is ${url},and request method is ${method}`; console.log(str); // 调用res.end()方法,向客户端响应一些内容 res.end(str) }) server.listen(80, () => { console.log('http server running at http://127.0.0.1'); })
5- 3 解决中文乱码问题
1、 当调用res.end() 方法,向客户端发送中文内容时,会出现乱码问题
- 手动设置内容的编码格式
server.on('request',(req,res) => {
res.setHeader('Content-Type','text/html;charset=utf-8')
})
5-4 根据不同的url响应不同的html内容
1、 核心实现 :
- 获取请求的url地址
- 设置默认的响应内容为
404 Not found
- 判断用户请求的是否为
/或/index.html
首页 - 判断用户请求的是否为
/about.html
关于页面 - 设置
Content-Type
响应头,防止中文乱码 - 使用
res.end()
把内容响应给客户端
2、 根据不同的url响应不同的html内容的实现代码
const http = require("http");
const server = http.createServer()
server.on('request', (req, res) => {
// - 获取请求的url地址
const url = req.url
// - 设置默认的响应内容为`404 Not found`
let content = '404 Not found!'
// - 判断用户请求的是否为`/或/index.html` 首页
// - 判断用户请求的是否为`/about.html`关于页面
if (url === '/' || url === '/index.html') {
content = '<h1>首页</h1>'
} else if (url === '/about.html') {
content = '<h1>关于页面</h1>'
}
// - 设置`Content-Type `响应头,防止中文乱码
res.setHeader('Content-Type', 'text/html;charset=utf-8')
// - 使用`res.end()`把内容响应给客户端
res.end(content);
})
server.listen(80, () => {
console.log('server running at http://127.0.0.1');
})