【Node.js】 第三章 http模块

小柒很爱喵 2022-11-24 21:37:11 阅读数:167

JSnodenode.js第三第三章

目录

1.1 什么是http模块

1.2  服务器相关概念

1.3 http模块创建Web服务器

1.4 根据不同url响应不同html内容


1.1 什么是http模块

http模块是Node.js官方提供的,用来创建web服务器的模块。通过http.createServer()方法就可以将一台电脑变成Web服务器,提供对外的资源。

引入方式:

const http = require('http')

Node.js不需要IIS、Apache等第三方软件,通过Node.js提供的http模块,可以仅通过几行代码,就可以把普通电脑变为Web服务器。 

1.2  服务器相关概念

1. IP地址

一台电脑对应一个IP地址

2. 域名和域名服务器

IP地址和域名一一对应,映射表存于DNS域名服务中

3. 端口号

1.3 http模块创建Web服务器

1. 创建步骤

  • 导入http模块
  • 创建http服务器实例
  • 在实例绑定request事件,监听客户端请求
  • 启动服务
// 导入http模块
const http = require('http');
// 创建服务器实例
const server = http.createServer();
// 通过on方法绑定request事件,监听客户端请求
// 需要传入两个参数,第一个是'requesr'字符串,第二个是监听的回调函数
server.on('request', (req, res) => {
// ...
})
// 服务器启动在指定端口, 并执行回调函数
server.listen(80,() =>{
// ...
})

 2. req 请求对象

只要服务器接收到了客户端的请求,就会调用server.on()为服务器绑定request事件处理函数,如果想在事件处理函数中,访问客户端相关的数据或属性,可以使用如下方式:

const http = require('http');
const server = http.createServer();
server.on('request',(req) => {
// req是客户端请求对象,包含了一些客户端相关的属性和数据
const url = req.url; // 客户端请求url,端口号后的路径
const method = req.method;// 客户端请求的方法
console.log(`visit url is ${url}, and request method is ${method}`);
})
server.listen(8080,() => {
console.log('http server is running at http://127.0.0.1:8080');
})

 把请求地址换成http://127.0.0.1:8080/index.html 、则会再次打印信息,由此可见,req的url属性只包含端口号后的路径

 3. res响应对象

在服务器的request事件处理函数中,如果想访问服务器相关的数据或属性,可以使用如下方式:

const http = require('http');
const server = http.createServer();
server.on('request',(req,res) => {
const url = req.url;
const method = req.method;
const str = `visit url is ${url}, and request method is ${method}`;
// res.end 方法的作用:向客户端返回指定数据,并结束此次请求
res.end(str);
})
server.listen(8080,() => {
console.log('http server is running at http://127.0.0.1:8080');
})

4. 解决中文乱码问题

如果res返回的数据包含中文,返回到页面会出现乱码问题:

server.on('request',(req,res) => {
const url = req.url;
const method = req.method;
const str = `客户端访问的url是 ${url}, 请求的方法是 ${method}`;
// res.end 方法的作用:向客户端返回指定数据,并结束此次请求
res.end(str);
})

 乱码问题解决:通过setHeader()方法手动设置内容编码格式:

server.on('request',(req,res) => {
const url = req.url;
const method = req.method;
const str = `客户端访问的url是 ${url}, 请求的方法是 ${method}`;
// 设置响应头'Content-Type', 内容为'text/html; charset=utf-8'
res.setHeader('Content-Type', 'text/html; charset=utf-8');
res.end(str);
})

 返回字符串正常显示:

 

1.4 根据不同url响应不同html内容

动态响应内容步骤

const http = require('http');
const server = http.createServer();
server.on('request',(req,res) => {
const url = req.url;
let content = '<h1>404 Not Found</h1>';
if(url === '/' || url === '/index.html'){
content = '<h1>首页</h1>';
}else if(url === '/about.html'){
content = '<h1>关于页面</h1>';
}
res.setHeader('Content-Type', 'text/html;charset=utf-8');
res.end(content);
})
server.listen(8080,() => {
console.log('http server is running at http://127.0.0.1:8080');
})

默认根地址http://127.0.0.1:8080和http://127.0.0.1:8080/index.html 返回到结果都是一样的:

  

 请求http://127.0.0.1:8080/about.html地址:

 

请求不存在但地址http://127.0.0.1:8080/abc.html :

版权声明:本文为[小柒很爱喵]所创,转载请带上原文链接,感谢。 https://blog.csdn.net/weixin_41950078/article/details/127851182