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…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...
