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

node.js基础学习-url模块-url地址处理(二)

前言

前面我们创建了一个HTTP服务器,如果只是简单的http://localhost:3000/about这种链接我们是可以处理的,但是实际运用中一般链接都会带参数,这样的话如果我们只是简单的判断链接来分配数据,就会报404找不到链接。为了解决这个问题,我们这篇文章就介绍url模块来处理url地址。
url模块有新旧两版用法,我们这篇文章就只介绍新的用法。
在 Node.js 中,url模块提供了用于处理和解析 URL(统一资源定位符)的实用工具。它允许开发者轻松地将一个 URL 字符串分解为其各个组成部分,如协议、主机、端口、路径、查询参数和片段等,并且可以用于构建新的 URL。这个模块是 Node.js 核心模块的一部分,所以不需要额外安装,直接通过require('url')就可以使用。

URL解析

url.parse()方法:这是url模块中最常用的方法之一。它接受一个 URL 字符串作为输入,并返回一个包含 URL 各个部分的对象。例如:

const url = require('url');
const myURL = 'https://example.com:8080/path/to/file?name=value#fragment';
const parsedURL = url.parse(myURL);
console.log(parsedURL);

输出结果会是一个类似这样的对象:

{protocol: 'https:',slashes: true,host: 'example.com:8080',port: '8080',hostname: 'example.com',hash: '#fragment',search: '?name=value',query: 'name=value',pathname: '/path/to/file',path: '/path/to/file?name=value',href: 'https://example.com:8080/path/to/file?name=value#fragment'}

从这个对象中可以清楚地看到 URL 的各个组成部分被分解出来了。

rl.parse()的第二个参数:这个方法还有一个可选的第二个参数,它是一个布尔值。如果设置为true,那么query属性的值将是一个经过querystring.parse()方法处理后的对象,而不是一个字符串。例如:

const url = require('url');
const myURL = 'https://example.com:8080/path/to/file?name=value&age=20';
const parsedURL = url.parse(myURL, true);
console.log(parsedURL.query);

输出结果:

{name: 'value',age: 20}

URL 格式化(构建新的 URL)

url.format()方法:这个方法与url.parse()相反,它接受一个包含 URL 各个部分的对象,并返回一个格式化后的 URL 字符串。例如:

const url = require('url');
const urlObject = {protocol: 'https:',hostname: 'example.com',port: '8080',pathname: '/path/to/file',search: '?name=value',hash: '#fragment'
};
const newURL = url.format(urlObject);
console.log(newURL);

输出结果为:

https://example.com:8080/path/to/file?name=value#fragment

实例

//使用http模块创建服务器,我们建议使用commonjs模块规范,因为很多第三方的组件都使用了这种规范。当然es6写法也支持。
//http模块式Node.js内置的模块,用于创建和管理HTTP服务器。传统的HTTP服务器一般使用C语言编写,但Node.js使用JavaScript实现,因此性能更好。
const http = require('http')//url模块用于解析url参数
const url=require('url');//创建服务器,监听3000端口
http.createServer((req, res) => {//判断请求url是否为favicon.ico,如果是则返回空(这个请求是一个浏览器的默认请求,可以忽略)if (req.url === '/favicon.ico') {return}//设置响应头,状态码为200,内容类型为text/html;charset=utf-8,这种才能正常显示中文res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'})//解析url参数,这里的第二个参数为true,表示解析query字符串,返回object格式const parsedUrl = url.parse(req.url,true);console.log(parsedUrl);let {pathname,query}=parsedUrl;//分配响应内容res.write(switchPage(pathname))res.write(`<p>queryParams: ${JSON.stringify(query)}</p>`)//这里必须要end,否则会出现卡死的情况res.end()
}).listen(3000, () => {console.log('Server is running on port 3000')
})/*** 根据url返回对应的页面内容* @param url* @returns {*|string}*/
const switchPage = (url) => {return {'/home': `<h1>Home Page</h1><p>Welcome to my website</p>`,'/about': `<h1>About Page</h1><p>This is a paragraph about me</p><img src="https://picsum.photos/200" alt="Random Image">`,'/list': `<h1>List Page</h1><ul><li>Item 1</li><li>Item 2</li><li>Item 3</li></ul>`,}[url] || `<h1>404 Not Found</h1><p>The page you are looking for does not exist</p>`
}

输入http://localhost:3000/about?name=%E5%B0%8F%E5%BC%A0&age=33

可以解析出请求参数query以及pathname,然后通过pathname找到映射的内容

nodemon自动启动服务(简单使用)

每次修改完代码都需要node server.js重启服务这种太麻烦了,nodemon是一个实用的工具,主要用于开发基于 Node.js 的应用程序。它能够监视 Node.js 应用程序中的文件变化,当检测到文件变化时,自动重新启动服务器。这样可以极大地提高开发效率,开发者无需手动停止并重新启动服务器来使代码更改生效。

使用 npm install -g nodemon 安装就行

安装完成后,在运行 Node.js 应用程序时,将node命令替换为nodemon。例如,如果你的应用程序的入口文件是server.js,通常你是使用node server.js来启动服务器,现在可以使用nodemon server.js

启动成功

相关文章:

node.js基础学习-url模块-url地址处理(二)

前言 前面我们创建了一个HTTP服务器&#xff0c;如果只是简单的http://localhost:3000/about这种链接我们是可以处理的&#xff0c;但是实际运用中一般链接都会带参数&#xff0c;这样的话如果我们只是简单的判断链接来分配数据&#xff0c;就会报404找不到链接。为了解决这个问…...

算法与数据结构(1)

一&#xff1a;数据结构概论 数据结构分为初阶数据结构&#xff08;主要由C语言实现&#xff09;和高阶数据结构&#xff08;由C实现&#xff09; 初阶数据结构当中&#xff0c;我们会学到顺序表、链表、栈和队列、二叉树、常见排序算法等内容。 高阶数据结构当中&#xff0…...

FTP介绍与配置

前言&#xff1a; FTP是用来传送文件的协议。使用FTP实现远程文件传输的同时&#xff0c;还可以保证数据传输的可靠性和高效性。 介绍 FTP的应用 在企业网络中部署一台FTP服务器&#xff0c;将网络设备配置为FTP客户端&#xff0c;则可以使用FTP来备份或更新VRP文件和配置文件…...

SQL面试题——抖音SQL面试题 最近一笔有效订单

最近一笔有效订单 题目背景如下,现有订单表order,包含订单ID,订单时间,下单用户,当前订单是否有效 +---------+----------------------+----------+-----------+ | ord_id | ord_time | user_id | is_valid | +---------+----------------------+--------…...

【线程】Java多线程代码案例(1)

【线程】Java多线程代码案例&#xff08;1&#xff09; 一、“单例模式” 的实现1.1“饿汉模式”1.2 “懒汉模式”1.3 线程安全问题 二、“阻塞队列”的实现2.1阻塞队列2.2生产者消费者模型2.3 阻塞队列的实现2.4 再谈生产者消费者模型 一、“单例模式” 的实现 “单例模式”即…...

go使用mysql实现增删改查操作

1、安装MySQL驱动 go get -u github.com/go-sql-driver/mysql2、go连接MySQL import ("database/sql""log"_ "github.com/go-sql-driver/mysql" // 导入 mysql 驱动 )type Users struct {ID intName stringEmail string }var db *sql.DBfu…...

【Rust】unsafe rust入门

这篇文章简单介绍下unsafe rust的几个要点 1. 解引用裸指针 裸指针其实就是C或者说C的指针&#xff0c;与C的指针不同的是&#xff0c;Rust的裸指针还是要分为可变和不可变&#xff0c;*const T 和 *mut T&#xff1a; 基于引用创建裸指针 let mut num 5;let r1 &num …...

dpwwn02靶场

靶机下载地址&#xff1a;https://download.vulnhub.com/dpwwn/dpwwn-02.zip 信息收集 ip add 查看kali Linux虚拟机的IP为&#xff1a;10.10.10.128 https://vulnhub.com/entry/dpwwn-2,343/中查看靶机的信息&#xff0c;IP固定为10.10.10.10 所以kali Linux添加仅主机网卡…...

K8S疑难概念理解——Pod,应该以哪种Kind来部署应用,为什么不直接Pod这种kind?

文章目录 一、Pod概念深度理解&#xff0c;为什么一般不直接以kindPod资源类型来部署应用?二、究竟应该以哪种资源类型来部署应用 一、Pod概念深度理解&#xff0c;为什么一般不直接以kindPod资源类型来部署应用? Pod是Kubernetes中的最小部署单元&#xff0c;可以包含一个或…...

LabVIEW进行仪器串行通信与模拟信号采集的比较

在现代测试、测量和控制系统中&#xff0c;设备通常采用两种主要方式与计算机进行交互&#xff1a;一种是通过数字通信接口&#xff08;如RS-232、RS-485、GPIB等&#xff09;&#xff0c;另一种是通过模拟信号&#xff08;电压、电流&#xff09;进行数据输出。每种方式具有其…...

D81【 python 接口自动化学习】- python基础之HTTP

day81 requests请求session用法 学习日期&#xff1a;20241127 学习目标&#xff1a;http定义及实战 -- requests请求session用法 学习笔记&#xff1a; requests请求session用法 import requests# 创建一个会话 reqrequests.session() url "http://sellshop.5istud…...

白鹿 Hands-on:消除冷启动——基于 Amazon Lambda SnapStart 轻松打造 Serverless Web 应用(二)

文章目录 前言一、前文回顾二、在 Lambda 上运行2.1、查看 Amazon SAM template2.2、编译和部署到 Amazon Lambda2.3、功能测试与验证 三、对比 Snapstart 效果四、资源清理五、实验总结总结 前言 在这个环节中&#xff0c;我们将延续《白鹿 Hands-on&#xff1a;消除冷启动——…...

ROC曲线

文章目录 前言一、ROC的应用&#xff1f;二、使用方式1. 数据准备2.绘图可视化 前言 在差异分析中&#xff0c;ROC曲线可以用来评估不同组之间的分类性能差异。差异分析旨在比较不同组之间的特征差异&#xff0c;例如在基因表达研究中比较不同基因在不同条件或组织中的表达水平…...

c++ 位图和布隆过滤器

位图&#xff08;bitmap&#xff09; 定义 位图是一种使用位数组存储数据的结构。每一位表示一个状态&#xff0c;通常用于快速判断某个值是否存在&#xff0c;或者用来表示布尔类型的集合。 特点 节省空间&#xff1a;一个字节可以表示8个状态。高效操作&#xff1a;位操作…...

阿里云CPU过载的一点思考

现象&#xff1a;阿里云ECS服务器连续5个周期CPU超90%告警 分析&#xff1a; max_connections和max_user_connections都做了限制&#xff0c;但是依然告警&#xff0c;服务器上有四个子服务&#xff0c;查看了每个服务的配置文件&#xff0c;发现使用同一个数据库账号&#x…...

单片机学习笔记 15. 串口通信(理论)

更多单片机学习笔记&#xff1a;单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…...

算法训练营day22(二叉树08:二叉搜索树的最近公共祖先,插入,删除)

第六章 二叉树part08 今日内容&#xff1a; ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点 详细布置 235. 二叉搜索树的最近公共祖先 相对于 二叉树的最近公共祖先 本题就简单一些了&#xff0c;因为 可以利用二叉搜索树的…...

Linux history 命令详解

简介 history 命令显示当前 shell 会话中以前执行过的命令列表。这对于无需重新输入命令即可重新调用或重新执行命令特别有用。 示例用法 显示命令历史列表 history# 示例输出如下&#xff1a;1 ls -l 2 cd /var/log 3 cat syslog执行历史记录中的命令 !<number>…...

Kafka知识体系

一、认识Kafka 1. kafka适用场景 消息系统&#xff1a;kafka不仅具备传统的系统解耦、流量削峰、缓冲、异步通信、可扩展性、可恢复性等功能&#xff0c;还有其他消息系统难以实现的消息顺序消费及消息回溯功能。 存储系统&#xff1a;kafka把消息持久化到磁盘上&#xff0c…...

【Android】EventBus的使用及源码分析

文章目录 介绍优点基本用法线程模式POSTINGMAINMAIN_ORDEREDBACKGROUNDASYNC 黏性事件 源码注册getDefault()registerfindSubscriberMethods小结 postpostStickyunregister 介绍 优点 简化组件之间的通信 解耦事件发送者和接收者在 Activity、Fragment 和后台线程中表现良好避…...

【大数据学习 | Spark调优篇】Spark之内存调优

1. 内存的花费 1&#xff09;每个Java对象&#xff0c;都有一个对象头&#xff0c;会占用16个字节&#xff0c;主要是包括了一些对象的元信息&#xff0c;比如指向它的类的指针。如果一个对象本身很小&#xff0c;比如就包括了一个int类型的field&#xff0c;那么它的对象头实…...

Linux:文件系统inode

早期&#xff0c;存储文件的设备是磁盘&#xff08;当下的市场几乎都是SSD&#xff09;&#xff0c;但大家习惯的把它们都称为磁盘&#xff0c;磁盘是用来表示区分内存的存储设备。而在操作系统看来&#xff0c;这个存储设备的结构就是一个线性结构&#xff0c;这一点很重要。 …...

力扣难题解析

滑动窗口问题 76.最小覆盖子串 题目链接&#xff1a;76. 最小覆盖子串 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空…...

4.5-Channel 和 Flow:SharedFlow 和 StateFlow

文章目录 SharedFlow数据流的收集和事件订阅的区别launchIn() 和 shareIn() 的区别SharedFlow 与 Flow、Channel 的区别shareIn() 适用场景 shareIn() 的具体参数说明shareIn() 的 replay 参数shareIn() 的 started 参数WhileSubscribed() 的参数及适用场景 MutableSharedFlow、…...

Qt | TCP服务器实现QTcpServer,使用线程管理客户端套接字

点击上方"蓝字"关注我们 01、QTcpServer >>> QTcpServer 是 Qt 网络模块中的一个类,用于实现TCP服务器。它允许创建一个服务器,可以接受来自客户端的连接。QTcpServer 是事件驱动的,这意味着它将通过信号和槽机制处理网络事件。 常用函数 构造函数: QT…...

【提高篇】3.6 GPIO(六,寄存器介绍,下)

目录 2.3 输出速度寄存器OSPEEDR(GPIOx_OSPEEDR) (x = A..I) 2.4 上拉/下拉寄存器 (GPIOx_PUPDR) (x = A..I) 2.5 输入数据寄存器(IDR) 2.6 输出数据寄存器(ODR) 2.7 置位/复位寄存器(BSRR) 2.8 BSRR与ODR寄存器的区别 2.3 输出速度寄存器OSPEEDR(GPIOx_OSPEEDR) (…...

【AI】数据,算力,算法和应用(3)

三、算法 算法这个词&#xff0c;我们都不陌生。 从接触计算机&#xff0c;就知道有“算法”这样一个神秘的名词存在。象征着专业、权威、神秘、高难等等。 算法是一组有序的解决问题的规则和指令&#xff0c;用于解决特定问题的一系列步骤。算法可以被看作是解决问题的方法…...

深度学习笔记——生成对抗网络GAN

本文详细介绍早期生成式AI的代表性模型&#xff1a;生成对抗网络GAN。 文章目录 一、基本结构生成器判别器 二、损失函数判别器生成器交替优化目标函数 三、GAN 的训练过程训练流程概述训练流程步骤1. 初始化参数和超参数2. 定义损失函数3. 训练过程的迭代判别器训练步骤生成器…...

网络安全开源组件

本文只是针对开源项目进行收集&#xff0c;如果后期在工作中碰到其他开源项目将进行更新。欢迎大家在评论区留言&#xff0c;您在工作碰到的开源项目。 祝您工作顺利&#xff0c;鹏程万里&#xff01; 一、FW&#xff08;防火墙&#xff09; 1.1 pfSense pfSense项目是一个免费…...

Python毕业设计选题:基于django+vue的智慧社区可视化平台的设计与实现+spider

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 养老机构管理 业主管理 社区安防管理 社区设施管理 车位…...

网站没有收录怎么办/百度推广登陆网址

难易程度&#xff1a;★★ 重要性&#xff1a;★★★★★ 树结构是面试中的考察的重点&#xff0c;而树的遍历又是树结构的基础。 //先序遍历&#xff0c;递归版本 public static ArrayList<Integer> preOrder(TreeNode root) {ArrayList<Integer> res new ArrayL…...

单页面网站好优化吗/网站做seo教程

---- 什么是CAS机制 CAS机制主要是发生于Java中原子操作类&#xff08;JUC&#xff09;的底层实现中&#xff0c;其中在CAS机制中包含3个基本参数&#xff1a;内存地址V、旧预期值A、要修改的新值B。 当要更新一个变量的时候&#xff0c;只有当变量的预期值A和内存地址V当中的实…...

2013电子商务网站建设/清远新闻最新

前端网站中如果存在一些让用户填写内容的表单元素的话&#xff0c;我们可以使用JQ中获得焦点事件和失去焦点事件&#xff0c;来给用户作出一些提示的内容。今天我们就说一说JQuery下获得焦点和失去焦点的事件的使用方法。jquery focus()获得焦点事件focus()方法&#xff1a;当通…...

做外贸什么网站比较好/网络推广竞价外包

在虚拟机中安装 Ubuntu 步骤 安装前的准备和基本安装设置语言环境安装常用软件 1. 安装前的准备和基本安装 1.1 安装前的准备 访问 http://cn.ubuntu.com/download/ 下载 Ubuntu 16.04 版本在操作系统上安装 VMWare 虚拟机软件 为什么要使用虚拟机&#xff1f; 不需要准备…...

iis .htaccess wordpress/自媒体营销的策略和方法

文章目录一、概述二、Hudi CLI三、Spark 与 Hudi 整合使用1&#xff09;Spark 测试2&#xff09;Spark 与 Hudi 整合使用1、启动spark-shell2、导入park及Hudi相关包3、定义变量4、模拟生成Trip乘车数据5、将模拟数据List转换为DataFrame数据集6、将数据写入到hudi四、Flink 与…...

张店学校网站建设方案/seo1域名查询

1.Apache配置PHP个人认为首先要注意的是Apache和PHP的版本信息&#xff0c;不同的版本之间所要进行设置的参数是不同的&#xff0c;开始的盲目让自己受尽了苦头。 2.选择版本&#xff1a;Apache 2.2.14 PHP:5.2.5 具体细节不再赘述。。。3.验证Apache和PHP是否安装成功&#x…...