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…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
Python实现简单音频数据压缩与解压算法
Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...
OCR MLLM Evaluation
为什么需要评测体系?——背景与矛盾 能干的事: 看清楚发票、身份证上的字(准确率>90%),速度飞快(眨眼间完成)。干不了的事: 碰到复杂表格(合并单元…...
OpenGL-什么是软OpenGL/软渲染/软光栅?
软OpenGL(Software OpenGL)或者软渲染指完全通过CPU模拟实现的OpenGL渲染方式(包括几何处理、光栅化、着色等),不依赖GPU硬件加速。这种模式通常性能较低,但兼容性极强,常用于不支持硬件加速…...
标注工具核心架构分析——主窗口的图像显示
🏗️ 标注工具核心架构分析 📋 系统概述 主要有两个核心类,采用经典的 Scene-View 架构模式: 🎯 核心类结构 1. AnnotationScene (QGraphicsScene子类) 主要负责标注场景的管理和交互 🔧 关键函数&…...
