文章目录
前言
哈喽,CSDN的各位大佬,咱又来更新笔记了,希望多多支持一下🔥,看的是黑马程序员的视频,喜欢的话就一起学习。
http 模块
http模块
是Node.js
官方提供的,用于创建 web 服务器的模块,通过 http 模块提供的http.createServer()
方法,就可以把一台电脑,变成一台 web 服务器,从而对外界提供 web 资源服务。
导入方法:
const http = require("http");
服务器和普通电脑区别:
服务器安装了 web 服务器软件,例如
IIS(Internet Information Services)
、Apache(阿帕奇)
等,通过安装这些服务器软件可以把电脑当成一个 web 服务器。
IP 地址
IP 地址是互联网上每台技术算计的唯一地址(例:192.168.1.1)
- 互联网中每台 web 服务器,都有自己的 ip 地址
- 可以把自己的电脑当成一台服务器访问。
域名和域名服务器
虽然 ip 地址可以唯一标识网络上的计算机,但不直观,不好记忆,随后发明了域名地址
ip 地址和域名是一一对应的关系,对应的关系放在域名服务器(DNS) 中,域名服务器就是提供 ip 地址和域名之间的转换服务的服务器
注:
127.0.0.1 对应的域名就是localhost
.
端口号
每个 web 服务器都对应一个唯一的端口号,客户端发送过来网络请求,通过端口号,可以被对应的
web服务器
进行处理。
注:
- 每个端口号不能同时被多个 web 服务器占用。
- 在实际应用中,URL 中的 80 端口可以
省略
。
创建基本 web 服务器
步骤:
1. 导入http
模块
const http = require("http");
2. 创建 web 服务器实例
const server = http.createServer();
3. 为服务器实例绑定 request 事件,监听客户端的请求
// 使用服务器的 .on()方法
server.on("request", (req, res) => {
//有客户请求服务器,就会触发request事件,从而调用这个函数
console.log("Someone visit our web server.");
});
4. 启动服务器
//调用server.listen(端口号,回调)方法。
server.listen(80, () => {
console.log("http server running at http://127.0.0.1:80");
});
实例
const http = require("http");
const server = http.createServer();
server.on("request", (req, res) => {
console.log("someone visit our web server");
});
server.listen(8080, () => {
console.log("your server running at 127.0.0.1:8080");
});
req 请求对象
只要服务器接收到了客户端的请求,就会调用通过
server.on()
为服务器绑定的request 事件
如果想在事件处理函数中,访问与客户端相关的数据
或属性
,可以使用的方法:
server.on("request", (req, res) => {
//req是请求对象
//req.url是客户端请求的URL地址
//req.method是客户端的method请求类型
const str = `Your request url is ${req.url}, and request method is ${req.method}`;
console.log(str);
});
res 响应对象
在服务器的 request 事件处理函数中,如果想访问与服务器相关的数据或实行,可以使用的方法:
server.on('request',(req.res)=>{
//res是响应对象,包含了与服务器相关的数据和属性
// 例如:发送字符串
const str = `your request url is ${req.url},and request method is ${req.method}`
res.send(str);
})
案例:
const http = require("http");
const server = http.createServer();
server.on("request", (req, res) => {
const str = `Your request url is ${req.url},and your request method is ${req.method}`;
//向客户端发送指定的内容
res.end(str);
});
server.listen(8080, () => {
console.log("your server running at 127.0.0.1:8080");
});
解决中文乱码
问题
当调用
res.end()
方法,向客户端发送中文内容是,会出现乱码问题,需要手动设置内容的编码格式
server.on("request", (req, res) => {
//发送的内容包括中文
const str = `请求的URL地址为${req.url},请求的方法是${req.method}`;
res.setHeader("Content-Type", "text/html;charset=utf-8");
res.end(str);
});
设置之前
设置之后
明显看到在浏览器打开会出现乱码,而接口调试工具却没有出现这种问题,我想可能是在调试工具发送请求并在收到请求时,自动加上了响应格式。
根据不同 URL 返回不同内容
核心实现步骤
- 获取请求的 URL 地址
- 设置默认的响应内容为
404 Not found
- 判断用户请求的是否为
/
或/index.html
首页 - 判断用户请求的是否是其他页面
- 设置
Content-Type响应头
,防止中文乱码 - 使用
res.end()
把内容返回给客户端
动态响应内容
server.on('request',(req,res)=>{
const url = req.url // 获取请求的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)
}
})
案例:
const http = require("http");
const server = http.createServer();
server.on("request", (req, res) => {
const url = req.url;
var 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("web server running at 127.0.0.1:8080");
});
案例 - 实现 clock 时钟的 web 服务器
核心思路
把文件的实际存放路径,作为每个资源的
请求URL地址
实现步骤
- 导入需要的模块
//1. http
const http = require("http");
//2. path
const path = require("path");
// 3. fs
const fs = require("fs");
- 创建基本的 web 服务器
const server = http.createServer();
server.on("request", (req, res) => {});
server.listen(80, () => {
console.log("server running at 127.0.0.1");
});
- 将资源的请求 URL 地址映射为文件的存放地址
//获取客户端的URL地址
const url = req.url;
// 映射成为本地地址
const fpath = path.join(__dirname, url);
- 读取文件内容并响应给客户端
fs.readFile(fpath, "utf8", (err, data) => {
if (err) return res.end("404 Not found");
res.end(data);
});
- 优化资源的请求路径
let fpath = "";
if (url === "/") {
fpath = path.join(__dirname, "./clock/index.html");
} else {
fpath = path.join(__dirname, "./clock", url);
}
完整代码:
const http = require("http");
const path = require("path");
const fs = require("fs");
const server = http.createServer();
server.on("request", (req, res) => {
//获取URL
const url = req.url;
//映射本地
// const fpath = path.join(__dirname,url);
let fpath = "";
if (url === "/") {
fpath = path.join(__dirname, "./clock/index.html");
} else {
fpath = path.join(__dirname, "./clock", url);
}
fs.readFile(fpath, "utf8", (err, data) => {
if (err) return res.end("404 Not found");
res.end(data);
});
});
server.listen(8080, () => {
console.log("server running at http://127.0.0.1:8080");
});
留言
🔥🔥🔥🔥
一起学习吧
🔥🔥🔥🔥