1.基础HTTP服务器:
  • 添加了路由处理
  • 添加了404错误处理
  • 添加了服务器错误监听
2.静态资源服务器:
  • 使用异步文件操作
  • 支持目录自动索引(默认加载 index.html)
  • 自动检测文件类型并设置正确Content-Type
  • 更完善的错误处理
3.处理GET请求参数
  • 提供了一个HTML表单用于测试
  • 使用url模块解析URL和查询参数
  • 清晰展示接收到的GET参数
4.处理POST请求参数:
  • 提供了一个HTML表单用于测试
  • 使用流的方式处理POST数据
  • 正确解析表单数据
  • 清晰展示接收到的POST参数

一、HTTP模块

const http = require("http");// 创建服务器实例
const app = http.createServer((req, res) => {// 设置响应头,指定内容类型和编码res.setHeader("Content-Type", "text/html;charset=utf-8");// 根据请求路径返回不同内容switch (req.url) {case "/":res.end("欢迎访问主页!");break;case "/about":res.end("这是关于页面!");break;default:res.statusCode = 404;res.end("404 - 页面未找到");}
});// 监听端口并启动服务器
app.listen(5000, () => {console.log("服务器已启动!监听在 http://localhost:5000");
});// 添加错误处理
app.on("error", (error) => {console.error(`服务器启动失败: ${error.message}`);
});    

二、静态资源服务器

const http = require("http");
const fs = require("fs").promises;
const path = require("path");// 定义静态资源目录
const STATIC_DIR = path.join(__dirname, "static");// 内容类型映射表
const CONTENT_TYPES = {".html": "text/html",".css": "text/css",".js": "text/javascript",".json": "application/json",".png": "image/png",".jpg": "image/jpeg",".gif": "image/gif",".svg": "image/svg+xml",".txt": "text/plain"
};const app = http.createServer(async (req, res) => {try {// 构建文件路径let filePath = path.join(STATIC_DIR, req.url === "/" ? "index.html" : req.url);// 检查文件是否存在await fs.access(filePath);// 获取文件状态const stat = await fs.stat(filePath);if (stat.isDirectory()) {// 如果是目录,尝试默认文件filePath = path.join(filePath, "index.html");await fs.access(filePath);}// 获取文件扩展名并确定内容类型const extname = path.extname(filePath);const contentType = CONTENT_TYPES[extname] || "application/octet-stream";// 设置响应头并发送文件内容res.setHeader("Content-Type", contentType);const fileContent = await fs.readFile(filePath);res.end(fileContent);} catch (error) {// 处理错误res.statusCode = 404;res.end("404 - 文件未找到");}
});app.listen(3000, () => {console.log("服务器监听在 http://localhost:3000");
});    

三、服务器获取get请求参数

在./static下面写一个index.html页面,页面中发送一个get请求

const http = require("http");
const url = require("url");
const qs = require("querystring");const app = http.createServer((req, res) => {res.setHeader("Content-Type", "text/html;charset=utf-8");// 解析URL和查询参数const parsedUrl = url.parse(req.url, true);const pathname = parsedUrl.pathname;const query = parsedUrl.query;if (pathname === "/") {// 返回表单页面const formHtml = `<form method="GET" action="/api"><input type="text" name="username" placeholder="用户名"><input type="password" name="password" placeholder="密码"><button type="submit">提交</button></form>`;res.end(formHtml);} else if (pathname === "/api") {// 处理GET请求参数res.end(`收到GET请求,参数:${JSON.stringify(query)}`);} else {res.statusCode = 404;res.end("404 - 页面未找到");}
});app.listen(8888, () => {console.log("服务器已启动!地址为: http://localhost:8888");
});    

 四、服务器获取post请求参数

获取post请求的参数,通过给req绑定事件和end事件,来获取监听的参数,data事件一个接收的事件,end事件 当post请求的参数都接收完毕,就出发end事件

const http = require("http");
const qs = require("querystring");const app = http.createServer((req, res) => {res.setHeader("Content-Type", "text/html;charset=utf-8");if (req.url === "/") {// 返回表单页面const formHtml = `<form method="POST" action="/api"><input type="text" name="username" placeholder="用户名"><input type="password" name="password" placeholder="密码"><button type="submit">提交</button></form>`;res.end(formHtml);} else if (req.url === "/api" && req.method === "POST") {// 处理POST请求let body = "";// 监听data事件,收集数据块req.on("data", (chunk) => {body += chunk.toString();});// 监听end事件,数据接收完成req.on("end", () => {// 解析表单数据const formData = qs.parse(body);// 返回处理结果res.end(`收到POST请求,参数:${JSON.stringify(formData)}`);});} else {res.statusCode = 404;res.end("404 - 页面未找到");}
});app.listen(8888, () => {console.log("服务器已启动!地址为: http://localhost:8888");
});    

每个步骤的代码都可以独立运行,并且包含了必要的注释以便理解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/83995.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/83995.shtml
英文地址,请注明出处:http://en.pswp.cn/web/83995.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux grep 命令

grep 是 Linux/Unix 系统中用于文本搜索的强大工具&#xff0c;支持基于正则表达式的模式匹配。以下是其详细用法及实际应用示例&#xff1a; 基本语法 grep [选项] 模式 [文件...]模式&#xff1a;要搜索的字符串或正则表达式。文件&#xff1a;可以是单个文件或多个文件&…

oracle 11g通过rman做备份和还原

ORACLE RMAN增量备份完整恢复测试 1.创建测试环境: 1.1.创建测试表空间 SQL> create tablespace tablespace1 datafile ‘/data/u01/app/oracle/oradata/orcl/tablespace1.dbf’ size 10m; SQL> 1.2.创建测试用户并指定为默认表空间: SQL> create user user1 iden…

为什么TCP有粘包问题,而UDP没有

TCP粘包问题源于其面向字节流的设计&#xff0c;而UDP无此问题因其基于数据报的传输机制。 &#x1f50d; 一、TCP粘包问题的原因 字节流传输特性 TCP将数据视为连续的字节流&#xff0c;而非独立的消息包。发送端多次写入的小数据可能被合并为一个TCP段发送&#xff1b;接收端…

ELM:Embodied Understanding of Driving Scenarios

1. ELM 的创新点与核心思路 ELM 的核心在于 “具身理解”(Embodied Understanding),即通过常识与环境交互并进行推理,这一理念适用于自动驾驶车辆、机器人和无人机等多种应用场景。具身智能体(Embodied Agent)需具备四大核心能力:首先,它能够描述周围环境,对交通物体的…

实景VR知识科普

实景VR的定义与技术特点 实景VR&#xff0c;即基于真实场景的虚拟现实技术&#xff0c;是通过计算机生成的三维环境&#xff0c;旨在模拟并再现真实世界场景。用户佩戴VR设备&#xff08;如VR头盔、手柄等&#xff09;后&#xff0c;能够沉浸在一个高度仿真的虚拟环境中&#…

CppCon 2016 学习:ITERATOR HAIKU

这组幻灯片讲解了 C 中**范围&#xff08;Ranges&#xff09;和迭代器&#xff08;Iterators&#xff09;**的核心概念&#xff0c;特别是 C14 标准定义的五种迭代器类别&#xff0c;以及范围的基本使用方式。我帮你理个思路&#xff1a; 1. RANGE-SEQUENCE: 元素范围&#xf…

开源飞控fmt软件在环仿真环境搭建

tags: 飞控 fmt开发环境搭建 fmt是国产开源飞控&#xff0c;特点是支持基于模型设计&#xff08;基于simulink仿真&#xff09;&#xff0c;源码结构目录较清晰&#xff0c;项目体积较小。 此项目操作系统选择的是国产实时操作系统rt-thread&#xff0c;也是开源项目。&#…

如何通过AI测试平台实现自动化缺陷检测和优化

在数字化转型加速的今天&#xff0c;软件质量保证已成为企业竞争力的关键要素之一。传统的手工测试方法面临着效率低下、成本高昂和覆盖面有限等挑战&#xff0c;而AI技术的融入为软件测试领域带来了革命性的变化。本文将深入探讨如何构建一个完整的AI测试平台&#xff0c;实现…

使用JeecgBoot配置

Jeecg 使用方法 本文以在环境配置好的前提下进行讲解 如果不会配置环境 可在billbill网站的Jeecg官网搜索环境配置 第一步 打开redis&#xff0c;redis是一个服务&#xff0c;需要用命令行打开 且命令行不能关 不能实现一劳永逸效果 每次关闭都得重新打开一次。 第二步 启动j…

NodeJS:版本及对应时间并对应的npm版本

versionltsrelease dateenginenpmnode下载更新日志文档Node.js 24.0.1✅2025-05-0813.61--下载更新日志文档Node.js 22.12.0✅2024-12-03---下载更新日志文档Node.js 21.2.0 2023-11-1411.8.172.1710.2.3120下载更新日志文档Node.js 20.10.0✅2023-11-2211.3.244.810.2.3115下载…

UI前端大数据处理:应对海量数据的挑战与策略

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在数字化转型的深水区&#xff0c;全球每日产生的数据量已突破 500EB&#xff0c;相当于 10 亿…

对微服务的了解

微服务是一种架构风格&#xff0c;我们可以把应用程序划分为一组小型的、松散耦合的服务&#xff0c; 每个服务都运行在自己的进程中&#xff0c;并通过轻量级的通信机制进行通信&#xff0c; 每个服务都是独立部署、独立扩展、独立更新的&#xff0c;从而提高了应用程序的可伸…

计算机视觉生物启发视觉算法:如何模拟人眼与大脑?

计算机视觉生物启发视觉算法:如何模拟人眼与大脑? 一、前言二、人眼与大脑视觉系统基础概念​2.1 人眼的生理结构与功能​2.2 大脑视觉皮层的信息处理机制​三、生物启发视觉算法的核心技术​3.1 视网膜启发的特征提取算法​3.2 视觉皮层启发的分层特征学习算法​3.3 注意力机…

stm32使用定时器功能之高精度定时(微秒级)、输入捕获以及超声波测距

一、定时器功能之高精度定时&#xff08;微秒级&#xff09; 我们常用的延时函数中无论是HAL_Delay还是vTaskDelay()函数都是毫秒级的定时&#xff0c;我们可以借助定时器实现一个微秒级更高精度的延时函数。这个定时器不会影响FreeRtos的任务切换 这里就是用定时器的计数功能…

Git常用命令摘要

写这篇博文的目的只是简单的给自己及团队的日常工作中需要用到的git命令作个汇总&#xff0c;这样平时只需要查阅这篇文章就够了&#xff0c;不用到处查找。如果能给有需要的朋友一点点的帮助&#xff0c;那也算是意外之喜吧。 一、基础配置 # 设置用户名和邮箱&#xff08;首…

ubuntu 22.04 安装部署kibana 7.10.0详细教程

安装部署kibana 7.10.0详细教程 下载并安装二、修改kibana.yml文件三、性能配置四、启动服务验证五、安装启动常见问题 【背景】 整个elk安装是基于ubuntu 22.04和jdk 11环境。kibana均采用 *.deb方式安装&#xff0c;需要服务器能联网。ubuntu 22.04 安装部署elk(elasticsearc…

nfs 服务器的搭建

nfs 服务器的搭建 1.配置yum源 mkdir /etc/yum.repos.d/bak mv /etc/yum.repo.d/*.repo /etc/yum.repos.d/bak/ curl -o /etc/yum.repos.d/centos.repo http://10.26.210.101/centos/centos.repo # 外网 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.c…

Yii2 基础版实现 Token 认证 API 服务的完整框架方案

以下是一个基于 Yii2 基础版实现 Token 认证 API 服务的完整框架方案&#xff0c;包含 JWT 实现和完整代码&#xff1a; 1. 环境准备 composer create-project --prefer-dist yiisoft/yii2-app-basic yii2-api cd yii2-api2. 安装必要扩展 composer require firebase/php-jw…

主流版本控制工具Git vs Perforce P4:架构模式、性能、大文件管理及分支管理对比详解

Git和Perforce P4是两个强大的源代码管理工具&#xff0c;各有其独特的功能优势与适用场景。 本文中&#xff0c;Perforce中国授权合作伙伴-龙智将从架构设计、性能表现、文件管理及分支策略等维度&#xff0c;为您详细解析两者的关键差异&#xff0c;帮助您根据团队需求&…

文件系统2(Linux下)

1 挂载分区 文件系统1中已经知道了能够根据inode号在指定分区找文件了&#xff0c;也已经能根据目录文件内容&#xff0c;找指定的inode了&#xff0c;在指定的分区内&#xff0c;就可以对文件进行操作了。但是还有几个问题&#xff0c;那就是inode是不能跨分区的&#xff0c;…