Node.js——http 模块(一)

ops/2025/1/17 3:36:16/
http://www.w3.org/2000/svg" style="display: none;">

个人简介

👀个人主页: 前端杂货铺
🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展
📃个人状态: 研发工程师,现效力于中国工业软件事业
🚀人生格言: 积跬步至千里,积小流成江海
🥇推荐学习:🍍前端面试宝典 🎨100个小功能 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js实战 🍒Three.js

🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧

内容参考链接
Node.js(一)Node.js——fs(文件系统)模块
Node.js(二)Node.js——path(路径操作)模块

文章目录

    • 前言
    • 创建 HTTP 服务
    • 请求信息
    • 解析请求路径
    • Simple Demo
    • 总结

前言

上篇文章我们学习了 path 模块,本篇文章我们学习 Node.js 的 http 模块。

http 模块是核心模块,它提供了 HTTP 服务器和客户端功能,主要用于前后端通信。


创建 HTTP 服务

创建一个基本的 HTTP 服务也很简单,只需要导入 http 模块后创建并监听服务对象即可。

const http = require('http')// 创建服务对象
const server = http.createServer((req, res) => {    // 解决响应内容中文乱码问题res.setHeader('content-type', 'text/html;charset=utf-8')// 设置响应体res.end('你好,Http Server')
})// 监听端口,启动服务
server.listen('9000', () => {console.log('服务启动成功...')
})

https://i-blog.csdnimg.cn/direct/04e215a5fab64c5d942ce5493e134693.png" alt="在这里插入图片描述" />

https://i-blog.csdnimg.cn/direct/54550a5f78b24cf6a448763010941e21.png" alt="在这里插入图片描述" />

请求信息

编写如下代码,启动服务后刷新 9000 网页即可在控制台中查看请求行和请求头的相关信息。

  • method:获取请求的方法(GET / POST 等)
  • url:获取请求的 url
  • httpVersion:请求 HTTP 协议版本号
  • headers:请求头信息
const http = require('http')// 创建服务对象
const server = http.createServer((req, res) => {console.log('请求的方法:', req.method);console.log('请求的url:', req.url);console.log('HTTP协议版本号:', req.httpVersion);console.log('HTTP请求头', req.headers);// 解决响应内容中文乱码问题res.setHeader('content-type', 'text/html;charset=utf-8')// 设置响应体res.end('你好,Http Server')
})// 监听端口,启动服务
server.listen('9000', () => {console.log('服务启动成功...')
})

https://i-blog.csdnimg.cn/direct/0ef2f962613d47469569b8727017a313.png" alt="在这里插入图片描述" />


解析请求路径

原来使用 url.parse() 来解析路径,但这种方式已被弃用;新的方式是使用 new URL() 来解析路径。

  • href: 完整的 URL 字符串。
  • protocol: 协议部分(包括末尾的冒号),如 https:。
  • slashes: 一个布尔值,表示协议部分是否包含两个斜杠(//)。
  • auth: 认证信息部分(即用户名和密码),如 user:pass,如果没有则为 null。
  • host: 主机名(包括端口号,如果有的话),如 example.com:8080。
  • port: 端口号部分(作为字符串),如 8080。
  • hostname: 主机名部分(不包括端口号),如 example.com。
  • hash: URL 中的哈希部分(包括 # 符号),如 #hash。
  • search: URL 中的查询字符串部分(包括 ? 符号),如 ?search=test。
  • query: 查询字符串部分(不包括 ? 符号),被解析为一个查询对象,如 { search: ‘test’ }。注意,这是一个 querystring 模块解析后的对象。
  • pathname: URL 中的路径名部分,如 /pathname/。
  • path: pathname 和 search 的组合,如 /pathname/?search=test。
const http = require('http');
const url = require('url');const server = http.createServer((request, response) => {// 解析请求路径const myUrl = 'https://example.com:8080/pathname/?search=test#hash';const parsedUrl = new URL(myUrl);console.log("新方式", parsedUrl);console.log(parsedUrl.searchParams.get('search'));const parsedUrl2 = url.parse(myUrl);console.log('旧方式', url.parse(parsedUrl2));response.end('Hello HTTP')
})server.listen('9000', () => {console.log('服务启动成功...');
});

https://i-blog.csdnimg.cn/direct/1a2ba76fce5f4f658c31cfb30bca8abc.png" alt="在这里插入图片描述" />

使用 get() 方法查询 search 的内容

parsedUrl.searchParams.get('search') // test

Simple Demo

下面我们编写一个小练习,实现网址上输入 /login 路由显示 登录页面,输入 register 路由显示 注册页面,输入 其他路由 显示 Not Found

const http = require('http')const server = http.createServer((request, response) => {// 获取请求的方法const { method } = request;// 获取请求的 url 路径const { pathname } = new URL(request.url, 'http:127.0.0.1');response.setHeader('content-type', 'text/html;charset=utf-8');if (method === 'GET' && pathname === '/login') {response.end('登录页面')} else if (method === 'GET' && pathname === '/register') {response.end('注册页面');} else {response.end('Not Found')}
})server.listen(9000, () => {console.log('服务启动成功...');
})

https://i-blog.csdnimg.cn/direct/68b0bd2c52e54ed9804e61c372b7508d.png" alt="在这里插入图片描述" />

https://i-blog.csdnimg.cn/direct/d34568a9c82b4a889b69a3a436b39ad6.png" alt="在这里插入图片描述" />

https://i-blog.csdnimg.cn/direct/c5e4ab95be174eaca4d8c3ac455f25a8.png" alt="在这里插入图片描述" />


总结

本篇文章我们首先学习了如何创建一个 HTTP 服务,之后认识到了一些请求信息(如: method、url、headers等),再之后我们学习了使用 url.parse()new URL() 进行路径的解析,最后编写了一个简单的 Demo 巩固了相关 API 的使用。

好啦,本篇文章到这里就要和大家说再见啦,祝你这篇文章阅读愉快,你下篇文章的阅读愉快留着我下篇文章再祝!


参考资料:

  1. Node.js教程(菜鸟教程)
  2. Node.js零基础视频教程(尚硅谷 · 李强)

https://i-blog.csdnimg.cn/blog_migrate/3cf97cbd47fc0cd482bf8e677dab493e.png" alt="在这里插入图片描述" />



http://www.ppmy.cn/ops/150704.html

相关文章

基于SSM实现的垃圾分类平台系统功能实现九

一、前言介绍: 1.1 项目摘要 随着城市化进程的加速和居民生活水平的提高,城市生活垃圾的产量急剧增加,给城市环境管理带来了巨大压力。传统的垃圾处理方式,如填埋和焚烧,不仅占用大量土地资源,还可能对环…

蓝桥杯刷题第一天——判断闰年

题目描述 输入一个年份,判断这一年是否是闰年,如果是输出 yes,否则输出 no。 1582 年以来,闰年的定义: 普通闰年:公历年份是 4 的倍数,且不是 100 的倍数的,为闰年(如…

VUE3 组合式 API 中,ref 和 reactive 是两种核心的响应式数据处理方式

在 Vue 3 的组合式 API 中,ref 和 reactive 是两种核心的响应式数据处理方式,用于创建响应式对象。它们都使得数据变得响应式,当数据发生变化时,视图会自动更新。 1. ref ref 用于创建一个响应式的基本数据类型(如字…

MacOS删除多余的Windows启动项

我的Macbook之前通过BootCamp安装了windows后又删除了,但是开机按住option键还是会出现Windows 启动盘选项,虽然没什么影响但还是觉得有问题,搜索一番找到删除方法,记录一下。主要问题是windows在Mac的EFI分区添加了相关内容&…

本地视频进度加入笔记+根据进度快速锁定视频位置

本地视频进度记录快速回溯 引言 在学习的过程中, 如果我们想快速记录当前看视频的位置, 后续回溯查找就会非常方便了。 实现效果 进度记录 通过按下快捷键ctrlaltu, 快速记录当前视频的进度信息,然后复制到typora软件内 快速回溯 在typora软件内, 选中视频索引…

Mysql--实战篇--数据库设计(范式和反范式,数据表设计原则)

一、范式和反范式 在数据库设计中,范式(Normalization)和反范式(Denormalization)是两种不同的设计理念,它们分别用于优化数据库的结构以满足不同的需求。范式主要用于减少数据冗余和提高数据完整性&#…

如何通过openssl生成.crt和.key

生成 .crt(证书文件)和 .key(私钥文件)的过程通常涉及使用加密工具或库来创建密钥对,并生成证书请求,最终由证书颁发机构(CA)或自签名生成证书。以下是生成 .crt 和 .key 文件的详细…

【leetcode21】344.反转字符串

原题链接 双指针法 原地反转字符串 class Solution {public void reverseString(char[] s) {int i0;int js.length-1;while(i<j){char tmps[i];s[i]s[j];s[j]tmp;i;j--;}} }