Nodejs_2
文章目录
1、path模块
1.导入
const path = require('path');
2.resolve
console.log(path.resolve(__dirname + '/haha' + '/haha.txt'));
// D:\学习\NodeJS\8_8\path\haha\haha.txt 把/ 改成 \
3.不太重要
console.log(path.sep); // 路径分隔符显示
// __filename 文件的绝对路径
console.log(__filename);
let str = 'D:\\学习\\NodeJS\\8_8\\path\\1_path.js'
console.log(path.parse(str)); // 文件信息
/*
{
root: 'D:\\',
dir: 'D:\\学习\\NodeJS\\8_8\\path',
base: '1_path.js',
ext: '.js',
name: '1_path'
}
*/
console.log(path.basename(str));
// 1_path.js
console.log(path.dirname(str));
// D:\学习\NodeJS\8_8\path
console.log(path.extname(str));
// .js
2、HTTP(概念补充)
超文本传输协议
1.报文
1.1、请求响应
浏览器给服务器发送数据,叫请求,内容叫请求报文
服务器给浏览器发送数据,叫响应,内容叫响应报文
1.2、查看报文
需要下载个软件fiddler,还下了个翻译,下载好了就会自动看报文
操作:
- 工具 -> 设置 -> HTTPS -> De… ffic 选上
- 点看要看的报文,显示出来的两个框上面是请求,下面是响应
- 点击两个框上面的数据,然后点击两个框中间有个什么“点击解压”之类的
操作完就看见了
2.请求报文
报文的基本组成部分:请求行、请求头 和 请求体 (请求头 和 请求体中间有一个空行)
2.1请求行
报文的第一行,由三个组成部分:
| 请求方法 | URL | HTTP版本号 |
|---|---|---|
| GET | https://www.baidu.com/ | HTTP/1.1 |
请求常用方法
GET / POST 用的比较多
- GET 获取数据
- POST 新增数据
- PUT / PATCH 更新数据
- DELETE 删除数据
- HEAD / OPTIONS / CONNECT / TRACE
URL(统一资源定位符)
协议名://主机名(ip地址):端口号 / 路径?查询字符串(key = value&key = value)
2.2请求头
一堆 key : value,要看请求头的信息,MDN这个网站可以看
Host: www.baidu.com
Connection: keep-alive
sec-ch-ua: "Not)A;Brand";v="99", "Microsoft Edge";v="127", "Chromium";v="127"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0
Accept:text/html,application/xhtml+xml,application/xml;q=0.9 。。。
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie:BIDUPSID=6BC588005D38C325BE54AD3189332D80;PSTM=1709609354;BD_UPN=12314753;BAIDUID=0F3D6776D3BFB26B4F12297947B0AE53:FG=1; 。。。
2.3请求体
刚才那个请求体为空,然后我登录了一个账号,这个请求就有请求体了
// key : value 有的使用json的方式,其他形式也有,这两比较多
{"account":"...","password":"384de3a13f76ca9f7ed02bd733953229",...}
3.响应报文
响应行、响应头、(空行)响应体
HTTP/1.1 200 OK
Connection: keep-alive
Content-Security-Policy: frame-ancestors 'self' ...
Date: Thu, 08 Aug 2024 10:11:51 GMT
Isprivate: 1
Server: BWS/1.1
Set-Cookie: H_PS_PSSID=60273_60520_60524_60566_60574_60360; path=/; expires=Fri, 08-Aug-25 10:11:50 GMT; domain=.baidu.com
Traceid: 172311191126131962989923331511446514183
X-Ua-Compatible: IE=Edge,chrome=1
X-Xss-Protection: 1;mode=block
Content-Length: 457508
空行
<!DOCTYPE html> .....
3.1响应行
| 版本号 | 响应状态码 | 响应状态的描述 |
|---|---|---|
| HTTP/1.1 | 200 | OK |
响应状态码
常用状态码
- 200 请求成功
- 403 禁止请求
- 404 找不到资源
- 500 服务器内部错误
HTTP协议把状态码分了类
- 1xx 信息响应
- 2xx 成功响应
- 3xx 重定向响应
- 4xx 客户端错误响应
- 5xx 服务端错误响应
响应状态的描述
和状态码对应,使用MDN查阅
- 200 OK
- 403 Forbidden
- 404 Not Found
- 500 Internal Server Error
3.2响应头
MDN,不一定全搜的到,有的是自定义的
Connection: keep-alive
Content-Security-Policy: frame-ancestors 'self' ...
Date: Thu, 08 Aug 2024 10:11:51 GMT
Isprivate: 1
Server: BWS/1.1
Set-Cookie: H_PS_PSSID=60273_60520_60524_60566_60574_60360; path=/; expires=Fri, 08-Aug-25 10:11:50 GMT; domain=.baidu.com
Traceid: 172311191126131962989923331511446514183
X-Ua-Compatible: IE=Edge,chrome=1
X-Xss-Protection: 1;mode=block
Content-Length: 457508
3.3响应体
内容格式有很多,常见:
- HTML
- CSS
- JavaScript
- 图片
- 视频
- JSON
3、端口(概念补充)
应用程序的数字标识,一台计算机有 65536 个端口 (0 ~ 65535),一个应用程序可以使用一个或多个端口
作用:实现不同主机应用程序的通信
给其他主机发送数据,根据 端口号 来找 处理这段数据 的 应用程序
192.168.1.1:21
4、http模块_1
这里就是后端的了
1.创建http服务
导入http模块
const http = require('http');
创建服务对象
// create 创建 请求 响应
const server = http.createServer((req, res) => {})
const http = require('http');
const server = http.createServer((req, res) => {
// 接受到请求的时候执行,如果多次请求也会多次执行
// end 设置响应体,并结束响应
res.end('haha');
});
// 监听端口,启动服务
server.listen(9000, () => {
// 服务启动成功后,执行
console.log('服务已经启动...');
// 这时,有人往这个 9000 端口发送http请求
// 就会调用那个回调函数
});
在浏览器输入 (本机地址)127.0.0.1 : 9000

响应请求
HTTP/1.1 200 OK
Date: Thu, 08 Aug 2024 11:10:11 GMT
Connection: keep-alive
Keep-Alive: timeout=5
Content-Length: 4
haha --> 响应体正好和end对的上
2.注意事项
-
Ctrl + C (命令行)停止服务,停止服务网页就连不上了
[Fiddler] The connection to ‘127.0.0.1’ failed.
Error: ConnectionRefused (0x274d).
System.Net.Sockets.SocketException 由于目标计算机积极拒绝,无法连接。 127.0.0.1:9000 -
响应体中有中文会乱码
res.end('哈哈'); // 鍝堝搱这个时候就需要加一个响应头,来设置响应体字符的解析格式
// 添加响应头 前面的key的名字 值 res.setHeader('content-type', 'text/html; charset=utf-8'); // 表示响应体是html文件 内容的字符集是utf-8,让浏览器用utf-8来解析响应体 -
端口被占用,比如服务中又开了一个命令行又node 同一个js
Error: listen EADDRINUSE: address already in use :::9000
- 解决方法1:把开着的关了…
- 解决方法2:把 js代码改了…
-
HTTP 默认端口 80,浏览器 127.0.0.1:80,完事之后,上面的:80会不见。就是以后可以端口写80直接输ip。
- HTTPS 的默认端口 443
- HTTP 常用端口 3000,8080,8090,9000 等
注:如果端口被程序占用了,可以用资源监视器找到(网络 -> 侦听端口),在用任务管理器关掉
3.浏览器看报文
请求响应行
点那个原始框

请求响应体
响应体在响应那看,之前那个请求体是有输入账号密码的网页看见的,那写一个
<form action="http://127.0.0.1:9000" method="post">
<!-- 设置到那个9000端口 这个就是前面请求行的请求方法 -->
<input type="text" name="username">
<input type="text" name="password">
<!-- 要设置name -->
<input type="submit">
</form>

URL 查询字符串
之前那个在?后面的 key:value
设置的方法:自己在URL后设置
http://127.0.0.1:9000/haha?ha=30&xi=QAQ
haha 是路径 后面跟了两查询字符串
浏览器看的方法:载荷
3万+

被折叠的 条评论
为什么被折叠?



