当前位置: 首页 > news >正文

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 沉淀&#xff0c…...

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 系统中使用容器&#xf…...

代码审计入门学习之sql注入

路由规则 入口文件&#xff1a;index.php <?php // ---------------------------------------------------------------------- // | wuzhicms [ 五指互联网站内容管理系统 ] // | Copyright (c) 2014-2015 http://www.wuzhicms.com All rights reserved. // | Licensed …...

2024信息技术、信息安全、网络安全、数据安全等国家标准合集共125份。

2024信息技术、信息安全、网络安全、数据安全等国家标准合集&#xff0c;共125份。 一、2024信息技术标准&#xff08;54份&#xff09; GB_T 17966-2024 信息技术 微处理器系统 浮点运算.pdf GB_T 17969.8-2024 信息技术 对象标识符登记机构操作规程 第8部分&#xff1a;通用…...

element ui的select选择框

我们首先先试一下&#xff0c;这个东西怎么玩的 <el-select v-model"select" change"changeSelect"><el-option value"香蕉"></el-option><el-option value"菠萝"></el-option><el-option value&quo…...

文档检索服务平台

文档检索服务平台是基于Elasticsearch的全文检索&#xff0c;包含数据采集、数据清洗、数据转换、数据检索等模块。 项目地址&#xff1a;Github、国内Gitee 演示地址&#xff1a;http://silianpan.cn/gdss/ 以下是演示角色和账号&#xff08;密码同账号&#xff09;&#xf…...

使用FastAPI进行可视化部署

文章目录 一、FastAPI介绍二、环境配置三、示例代码1.app.py代码如下2.websocket_handler.py 代码如下3.运行app4.遇到的问题与解决 一、FastAPI介绍 FastAPI是一个高性能的Python Web框架&#xff0c;它基于Starlette并利用了 Python类型提示的优势。它可以帮助我们快速构建具…...

设计模式 之 工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)(C++)

文章目录 C 工厂模式引言一、简单工厂模式概念实现步骤示例代码优缺点 二、工厂方法模式概念实现步骤示例代码优缺点 三、抽象工厂模式概念实现步骤示例代码优缺点 C 工厂模式 引言 在 C 编程中&#xff0c;对象的创建是一个常见且基础的操作。然而&#xff0c;当项目规模逐渐…...

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 指针加减运算&#xff08;了解&#xff09; 6.2.1 指针加减具体数字…...

如何在 Mac 上安装并配置 JDK 环境变量

如何在Mac上安装并配置JDK环境变量 在开发过程中&#xff0c;许多应用和框架都需要使用Java&#xff0c;尤其是使用Java开发的应用程序。如果你是Mac用户&#xff0c;以下是安装并配置JDK环境变量的步骤&#xff0c;确保你能顺利运行Java程序。 步骤 1&#xff1a;下载JDK 访…...

【git-hub项目:YOLOs-CPP】本地实现05:项目移植

ok&#xff0c;经过前3个博客&#xff0c;我们实现了项目的跑通。 但是&#xff0c;通常情况下&#xff0c;我们的项目都是需要在其他电脑上也跑通&#xff0c;才对。 然而&#xff0c;经过测试&#xff0c;目前出现了2 个bug。 项目一键下载【⬇️⬇️⬇️】&#xff1a; 精…...

LeetCode 热题 100 206. 反转链表

LeetCode 热题 100 | 206. 反转链表 大家好&#xff0c;今天我们来解决一道经典的算法题——反转链表。这道题在 LeetCode 上被标记为简单难度&#xff0c;要求我们将一个单链表反转&#xff0c;并返回反转后的链表。下面我将详细讲解解题思路&#xff0c;并附上 Python 代码实…...

2025年02月21日Github流行趋势

项目名称&#xff1a;source-sdk-2013 项目地址url&#xff1a;https://github.com/ValveSoftware/source-sdk-2013项目语言&#xff1a;C历史star数&#xff1a;7343今日star数&#xff1a;929项目维护者&#xff1a;JoeLudwig, jorgenpt, narendraumate, sortie, alanedwarde…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...