Http模块及练习
### 作业
1. 静态文件服务器
```js
const http = await import('http')
const fs = await import('fs')
const proc = ((req,res)=>{
let file = `./public${req.url}`
let FilePath = file.replace('favicon.ico',"")
// 检查文件是否存在
if (!fs.existsSync(FilePath)) {
res.end('404')
console.log('文件未找到');
return
}
else{
// 读取文件
fs.readFile(FilePath,(err,data)=>{
// 根据文件拓展名设置Content-Type
const ext = FilePath.substring(FilePath.lastIndexOf('.'))
console.log(ext);
switch(ext){
case '.html':
return 'text.html'
case '.css':
return 'text.css'
case '.js':
return 'text.js'
default:
break;
}
// 返回文件内容
res.end(data)
})
}
})
let app = http.createServer(proc)
app.listen(8080)
```
2. 日志记录服务器
```js
const http = await import('http')
const fs = await import('fs')
// 时间戳
const date = Date.now()
let proc = (req,res)=>{
//请求方法
let me = req.method
//请求路径
const path = req.url
//客户端IP地址
const ip = req.headers.host
// 日志文件的格式为:[时间戳] - [请求方法] - [请求路径] - [客户端IP]。
const log = `[${date}]-[${me}]-[${path}]-[${ip}]`
fs.appendFile('./server.log',log,'utf8',(err)=>{
if (err) {
console.log('日志添加失败');
}
else{
fs.readFile('./index.html',(err,data)=>{
if (err) {
console.log('文件没找到');
}
else{
res.end(data)
}
})
}
})
}
let app = http.createServer(proc)
app.listen(5000)
```
3. 图片查看器
```js
const fs = await import('fs')
const http = await import('http')
let proc = function(req,res){
// 请求路径【用户通过访问/view?filename=】
let FilePath = `./images/${req.url.split('?')[1]?.split('=')[1]}`
// 请求的图片存在,返回图片内容
if (fs.existsSync(FilePath)) {
// 读取文件
fs.readFile(FilePath,(err,data)=>{
if (err) {
console.log('读取失败');
}
else{
// 根据文件扩展名判断
const ext = FilePath.substring(FilePath.lastIndexOf('.'))
let contentType = '';
switch (ext) {
case 'jpeg':
contentType = 'image/jpeg';
break;
case 'png':
contentType = 'image/png';
break;
case 'jpg':
contentType = 'image/jpg';
break;
default:
break;
}
// 返回图片内容
res.end(data)
}
})
}
else{
res.end('404')
}
}
let app = http.createServer(proc)
app.listen(4000)
```
4. 文件搜索服务
```js
const http = await import('http')
const fs = await import('fs')
let proc = function(req,res){
let keywords = req.url.split('?')[1]?.split('=')[1]
let FilePath = `.${req.url.split('?')[0]}`; // 获取路径部分
FilePath = FilePath.replace('/search',"")
console.log(FilePath);
// 读取指定目录中的文件列表
fs.readdir(FilePath,(err,files)=>{
if (!err) {
// 遍历文件列表
const SearchFile = files.filter(x=>x.includes(keywords))
// 返回JSON
res.end(JSON.stringify({files:SearchFile}))
}
else{
res.end('404')
}
})
}
let app = http.createServer(proc)
app.listen(8000)
// http://localhost:8000/search?query=example 这样访问
```
5. 简单Web服务
```js
const http = await import('http')
const fs = await import('fs')
const proc = function(req,res){
// 如果路径是 /,则将其视为目录请求
if (req.url == '/') {
// 依次搜索
// 定义顺序
const def = ['index.html','default.html']
// 读取文件内容
switch (true) {
// 检查index
case fs.existsSync(def[0]):
// 读取文件
fs.readFile(def[0],(err,data)=>{
if(err){res.end('404')}
else{
res.end(data)
}
})
break;
case fs.existsSync(def[1]):
fs.readFile(def[1],(err,data)=>{
if(err){res.end('404')}
else{
res.end(data)
}
})
break;
default:
break;
}
}
else{
res.end('404')
}
}
const app = http.createServer(proc)
app.listen(8080)
```
#### Stream(流)
1. 数据按顺序依次流动,不能随机访问。
2. 读写数据:从文件、网络等读取或写入数据。
### Node.js HTTP 服务器和文件服务器开发
1. HTTP 服务器开发
- `request` 对象封装了 HTTP 请求信息。
- `response` 对象用于构建 HTTP 响应并返回给客户端。
2.
```js
// 导入http模块
const http = await import('http')
let proc = function(request,response){
// 将http响应的HTMLneir写进response
console.log(request.url);
response.end('88')
}
let app = http.createServer(proc)
app.listen(8080)
```
- 协议://主机地址:端口号/路径?keywords = 888【】
- 所谓的Web服务器,在不同的语境中有不同含义:它有可能是指如nginx、apache这样托管类的程序,也可能指程序员开发的具有Web服务功能的程序,也有可能是指承载Web程序的物理服务器
- 现代计算机系统,端口号的范围:0 ~ 65535【其中0 ~ 1000是系统保留号】【后面的由用户自己分配】
- 常见的端口号:3306(mysql、MariaDb)、80(web)、22(ssh)、23(ftp)、3389(windows远程桌面)、5432(PostgreSql)
3. 文件服务器开发
- 文件服务器:通过解析 request.url 中的路径,将本地文件内容发送给客户端。
- url 模块:用于解析 URL,提取路径、查询参数等。
- path 模块:用于处理文件路径,确保跨平台兼容性。
- fs 模块:用于读取本地文件系统中的文件。
4. 使用页面html
```js
const http = await import('http')
const fs = await import('fs')
const app = http.createServer(function(req,res){
fs.readFile('index.html','utf8',(err,data)=>{
if (err) {
console.log(err);
}
else{
res.end(data)
}
})
})
app.listen(5000)
```
相关文章:
Http模块及练习
### 作业 1. 静态文件服务器 js const http await import(http) const fs await import(fs) const proc ((req,res)>{ let file ./public${req.url} let FilePath file.replace(favicon.ico,"") // 检查文件是否存在 if (!fs.existsSync(FilePa…...
计算机视觉行业洞察--影像行业系列第一期
计算机视觉行业产业链的上下游构成相对清晰,从基础技术研发到具体应用场景的多个环节相对成熟。 以下是我结合VisionChina经历和行业龙头企业对计算机视觉行业产业链上下游的拆解总结。 上下游总结 上游产业链分为软硬件两类,视觉的硬件主要指芯片、…...
C语言番外篇(3)------------>break、continue
看到我的封面图的时候,部分读者可能认为这和编程有什么关系呢? 实际上这个三个人指的是本篇文章有三个部分组成。 在之前的博客中我们提及到了while循环和for循环,在这里面我们学习了它们的基本语法。今天我们要提及的是关于while循环和for…...
【NLP 31、预训练模型的发展过程】
人的行为,究竟是人所带来的思维方式不同还是与机器一样,刻在脑海里的公式呢? 只是因为不同的人公式不同,所以人的行为才不同,可这又真的是人引以为傲的意识吗? 人脑只是相当于一个大型、驳杂的处理器&#…...
sqlclchery面对复杂的sql语句怎么办
面对复杂的SQL语句时,可以采取以下步骤来简化和解决问题: 理解需求 明确查询的目标,确保清楚需要获取哪些数据。 分解查询 将复杂查询拆分为多个简单部分,逐步构建最终结果。 使用注释 添加注释,解释每个部分的逻辑&…...
C++/JavaScript ⭐算法OJ⭐下一个排列
题目描述 31. Next Permutation A permutation of an array of integers is an arrangement of its members into a sequence or linear order. For example, for arr [1,2,3], the following are all the permutations of arr: [1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1]…...
《Mycat核心技术》第17章:实现MySQL的读写分离
作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 星球项目地址:https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀,…...
Windows 11 使用容器(Docker Podman)
文章目录 背景1、相关网站1.1、WSL1.2、Docker1.3、Podman 2、环境3、安装部署3.1、安装 WSL3.2、Docker3.2.1、Docker Desktop3.2.1.1、安装3.2.1.2、拉取镜像3.2.1.3、启动容器 3.3、Podman3.3.1、安装3.3.2、使用3.3.3、异常处理 总结 背景 Windows 系统中使用容器…...
代码审计入门学习之sql注入
路由规则 入口文件:index.php <?php // ---------------------------------------------------------------------- // | wuzhicms [ 五指互联网站内容管理系统 ] // | Copyright (c) 2014-2015 http://www.wuzhicms.com All rights reserved. // | Licensed …...
2024信息技术、信息安全、网络安全、数据安全等国家标准合集共125份。
2024信息技术、信息安全、网络安全、数据安全等国家标准合集,共125份。 一、2024信息技术标准(54份) GB_T 17966-2024 信息技术 微处理器系统 浮点运算.pdf GB_T 17969.8-2024 信息技术 对象标识符登记机构操作规程 第8部分:通用…...
element ui的select选择框
我们首先先试一下,这个东西怎么玩的 <el-select v-model"select" change"changeSelect"><el-option value"香蕉"></el-option><el-option value"菠萝"></el-option><el-option value&quo…...
文档检索服务平台
文档检索服务平台是基于Elasticsearch的全文检索,包含数据采集、数据清洗、数据转换、数据检索等模块。 项目地址:Github、国内Gitee 演示地址:http://silianpan.cn/gdss/ 以下是演示角色和账号(密码同账号)…...
使用FastAPI进行可视化部署
文章目录 一、FastAPI介绍二、环境配置三、示例代码1.app.py代码如下2.websocket_handler.py 代码如下3.运行app4.遇到的问题与解决 一、FastAPI介绍 FastAPI是一个高性能的Python Web框架,它基于Starlette并利用了 Python类型提示的优势。它可以帮助我们快速构建具…...
设计模式 之 工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)(C++)
文章目录 C 工厂模式引言一、简单工厂模式概念实现步骤示例代码优缺点 二、工厂方法模式概念实现步骤示例代码优缺点 三、抽象工厂模式概念实现步骤示例代码优缺点 C 工厂模式 引言 在 C 编程中,对象的创建是一个常见且基础的操作。然而,当项目规模逐渐…...
3、Kubernetes 集群部署 Prometheus 和 Grafana
Kubernetes 集群部署 Prometheus 和 Grafana node-exporter 安装Prometheus 安装和配置Prometheus 配置热加载Grafana 安装部署Grafana 配置 实验环境 控制节点/master01 192.168.110.10 工作节点/node01 192.168.110.20 工作节点/node02 192.168.110.30 node-exporter 安装 #…...
【C语言】第八期——指针
目录 1 初始指针 2 获取变量的地址 3 定义指针变量、取地址、取值 3.1 定义指针变量 3.2 取地址、取值 4 对指针变量进行读写操作 5 指针变量作为函数参数 6 数组与指针 6.1 指针元素指向数组 6.2 指针加减运算(了解) 6.2.1 指针加减具体数字…...
如何在 Mac 上安装并配置 JDK 环境变量
如何在Mac上安装并配置JDK环境变量 在开发过程中,许多应用和框架都需要使用Java,尤其是使用Java开发的应用程序。如果你是Mac用户,以下是安装并配置JDK环境变量的步骤,确保你能顺利运行Java程序。 步骤 1:下载JDK 访…...
【git-hub项目:YOLOs-CPP】本地实现05:项目移植
ok,经过前3个博客,我们实现了项目的跑通。 但是,通常情况下,我们的项目都是需要在其他电脑上也跑通,才对。 然而,经过测试,目前出现了2 个bug。 项目一键下载【⬇️⬇️⬇️】: 精…...
LeetCode 热题 100 206. 反转链表
LeetCode 热题 100 | 206. 反转链表 大家好,今天我们来解决一道经典的算法题——反转链表。这道题在 LeetCode 上被标记为简单难度,要求我们将一个单链表反转,并返回反转后的链表。下面我将详细讲解解题思路,并附上 Python 代码实…...
2025年02月21日Github流行趋势
项目名称:source-sdk-2013 项目地址url:https://github.com/ValveSoftware/source-sdk-2013项目语言:C历史star数:7343今日star数:929项目维护者:JoeLudwig, jorgenpt, narendraumate, sortie, alanedwarde…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
