当前位置: 首页 > 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…...

如何在Foobar2000中实现专业级歌词同步:3个简单步骤掌握ESLyric歌词源

如何在Foobar2000中实现专业级歌词同步&#xff1a;3个简单步骤掌握ESLyric歌词源 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource 想要在Foobar2000中享受…...

从 signed main 到 int main:一个宏定义引发的C++类型别名‘血案’

从 signed main 到 int main&#xff1a;一个宏定义引发的C类型别名‘血案’ 在C竞赛编程圈子里&#xff0c;你可能见过这样的代码模板&#xff1a;#define int long long配合signed main()的写法。这种看似简单的宏替换背后&#xff0c;隐藏着C类型系统和预处理器之间微妙的交…...

AI斗地主助手:3步快速部署的终极智能出牌方案

AI斗地主助手&#xff1a;3步快速部署的终极智能出牌方案 【免费下载链接】DouZero_For_HappyDouDiZhu 基于DouZero定制AI实战欢乐斗地主 项目地址: https://gitcode.com/gh_mirrors/do/DouZero_For_HappyDouDiZhu 想要在欢乐斗地主中轻松获胜吗&#xff1f;基于DouZero…...

终极Golang调试指南:从SSA中间码到DLV工具的完整调试艺术

终极Golang调试指南&#xff1a;从SSA中间码到DLV工具的完整调试艺术 【免费下载链接】golang-notes Go source code analysis(zh-cn) 项目地址: https://gitcode.com/gh_mirrors/go/golang-notes Golang-notes是一份全面的Go源代码分析笔记&#xff0c;涵盖了从语言特性…...

Salt Player终极使用指南:从新手到专家的15个实用技巧

Salt Player终极使用指南&#xff1a;从新手到专家的15个实用技巧 【免费下载链接】SaltPlayerSource Salt Player (A local music player trusted and chosen by hundreds of thousands of users) for Android Release, Feedback. 项目地址: https://gitcode.com/GitHub_Tre…...

Python Bilibili API完整指南:从零开始构建B站数据应用

Python Bilibili API完整指南&#xff1a;从零开始构建B站数据应用 【免费下载链接】bilibili-api 哔哩哔哩常用API调用。支持视频、番剧、用户、频道、音频等功能。原仓库地址&#xff1a;https://github.com/MoyuScript/bilibili-api 项目地址: https://gitcode.com/gh_mir…...

Ubuntu 18.04 + ROS Melodic 下,ORB-SLAM3 1.0 与 0.3 版本安装避坑全记录(附USB摄像头实战)

Ubuntu 18.04 ROS Melodic 下 ORB-SLAM3 双版本安装实战指南 在机器人视觉领域&#xff0c;ORB-SLAM3 作为当前最先进的视觉 SLAM 系统之一&#xff0c;其安装配置过程却常常让开发者头疼不已。本文将针对 Ubuntu 18.04 ROS Melodic 环境&#xff0c;详细解析 ORB-SLAM3 1.0 …...

2026 SCARA机械臂怎么选?高速装配与分拣场景品牌推荐

引言本指南基于高工机器人产业研究所&#xff08;GGII&#xff09;、中国报告大厅2025-2026年行业调研数据&#xff0c;结合工业机器人行业标准及实际应用案例&#xff0c;秉持公正中立原则&#xff0c;为制造企业提供高速分拣与电子装配场景下SCARA机械臂选购指导。指南聚焦核…...

2026 年 4 月 GEO 优化服务商实力榜单:服务方案与实战成果双维评估

2026 年&#xff0c;生成式 AI 深度重构信息获取与消费决策&#xff0c;GEO 生成式引擎优化已成为企业数字化布局的核心战略。当前 AI 搜索占据全球 40% 流量&#xff0c;国内 GEO 市场规模预计达 286 亿元&#xff0c;企业普遍面临品牌失声、信息失真、流量黑箱、技术不足等痛…...

Dify插件开发实战指南:手把手完成OAuth2集成、LLM路由与状态持久化(附GitHub高星模板)

第一章&#xff1a;Dify插件开发入门与核心架构解析Dify 插件机制是其扩展能力的核心支柱&#xff0c;允许开发者以标准化方式接入外部服务、增强 LLM 应用的上下文感知与执行能力。插件基于 OpenAPI 3.0 规范定义&#xff0c;通过 YAML 或 JSON 描述接口契约&#xff0c;并由 …...