Nodejs_2

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,还下了个翻译,下载好了就会自动看报文

操作:

  1. 工具 -> 设置 -> HTTPS -> De… ffic 选上
  2. 点看要看的报文,显示出来的两个框上面是请求,下面是响应
  3. 点击两个框上面的数据,然后点击两个框中间有个什么“点击解压”之类的

操作完就看见了

2.请求报文

报文的基本组成部分:请求行、请求头 和 请求体 (请求头 和 请求体中间有一个空行)

2.1请求行

报文的第一行,由三个组成部分:

请求方法URLHTTP版本号
GEThttps://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.1200OK

响应状态码

常用状态码

  • 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响应体

内容格式有很多,常见:

  1. HTML
  2. CSS
  3. JavaScript
  4. 图片
  5. 视频
  6. 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.注意事项

  1. Ctrl + C (命令行)停止服务,停止服务网页就连不上了

    [Fiddler] The connection to ‘127.0.0.1’ failed.
    Error: ConnectionRefused (0x274d).
    System.Net.Sockets.SocketException 由于目标计算机积极拒绝,无法连接。 127.0.0.1:9000

  2. 响应体中有中文会乱码

    res.end('哈哈');  // 鍝堝搱
    

    这个时候就需要加一个响应头,来设置响应体字符的解析格式

    //  添加响应头  前面的key的名字        值     
    res.setHeader('content-type', 'text/html; charset=utf-8');
    // 表示响应体是html文件 内容的字符集是utf-8,让浏览器用utf-8来解析响应体
    
  3. 端口被占用,比如服务中又开了一个命令行又node 同一个js

    Error: listen EADDRINUSE: address already in use :::9000

    • 解决方法1:把开着的关了…
    • 解决方法2:把 js代码改了…
  4. 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 是路径 后面跟了两查询字符串

浏览器看的方法:载荷

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值