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

news2024/12/27 7:56:38

前言

前面我们创建了一个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

启动成功

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

思科网络设备常用命令整理

思科网络设备的配置命令非常丰富&#xff0c;广泛应用于路由器、交换机和其他网络设备的管理与配置。以下是一些常见的思科设备配置命令&#xff0c;按照功能分类&#xff0c;以帮助你快速查找和使用。 一、基本命令 查看当前配置和状态 show running-config&#xff1a;查看…

2024年信号处理与神经网络应用(SPNNA 2024)

会议官网&#xff1a;www.spnna.org 会议时间&#xff1a;2024年12月13-15日 会议地点&#xff1a;中国武汉

Leecode经典题3-删除排序数组中的重复项

删除排序数组中的重复项 题目描述&#xff1a; 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 …

无人机数据处理系统:原理与核心系统

一、数据处理系统的运行原理 数据获取&#xff1a;无人机在飞行过程中&#xff0c;通过搭载的传感器&#xff08;如相机、激光雷达等&#xff09;采集到各种类型的数据&#xff0c;例如图像、点云等。这些数据是后续处理和分析的基础。 数据传输&#xff1a;采集到的数据会通…

ElasticSearch学习篇19_《检索技术核心20讲》搜推广系统设计思想

目录 主要是包含搜推广系统的基本模块简单介绍&#xff0c;另有一些流程、设计思想的分析。 搜索引擎 基本模块检索流程 查询分析查询纠错 广告引擎 基于标签倒排索引召回基于向量ANN检索召回打分机制&#xff1a;非精确打分精准深度学习模型打分索引精简&#xff1a;必要的…

【尚筹网】五、管理员维护

【尚筹网】五、管理员维护 任务清单分页管理管理员信息目标思路代码引入 PageHelperAdminMapper 中编写 SQL 语句AdminMapper 接口生成方法AdminServiceAdminHandler页面显示主体在页面上使用 Pagination 实现导航条 关键词查询页面上调整表单在翻页时保持关键词查询条件 单条删…

MySQL 启动失败问题分析与解决方案:`mysqld.service failed to run ‘start-pre‘ task`

目录 前言1. 问题背景2. 错误分析2.1 错误信息详解2.2 可能原因 3. 问题排查与解决方案3.1 检查 MySQL 错误日志3.2 验证 MySQL 配置文件3.3 检查文件和目录权限3.4 手动启动 MySQL 服务3.5 修复 systemd 配置文件3.6 验证依赖环境 4. 进一步优化与自动化处理结语 前言 在日常…

Apache storm UI如何更换默认8080端口

在搭建Apache storm环境的时候&#xff0c;遇到Apache storm UI默认端口是8080&#xff0c;但是这个端口会被其他java程序占用&#xff0c;导致Apache storm UI服务无法启动。报错Exception in thread “main” java.lang.RuntimeException: java.io.IOException: Failed to bi…

FPGA实现串口升级及MultiBoot(十)串口升级SPI FLASH实现

本文目录索引 工程架构example9工程设计Vivado设计Vitis设计example9工程验证1、读取FLASH ID2、擦除整个FLASH3、Blank-Check4、烧写Golden区位流5、读取FLASH内容6、烧写MultiBoot区位流(升级位流)7、MultiBoot区位流(升级位流)启动example10工程设计Vivado设计Vitis设计exam…

图解人工智能:从规则到深度学习的全景解析

&#x1f31f;作者简介&#xff1a;热爱数据分析&#xff0c;学习Python、Stata、SPSS等统计语言的小高同学~&#x1f34a;个人主页&#xff1a;小高要坚强的博客&#x1f353;当前专栏&#xff1a;Python之机器学习&#x1f34e;本文内容&#xff1a;图解人工智能&#xff1a;…

Binder架构

一、架构 如上图&#xff0c;binder 分为用户层和驱动层两部分&#xff0c;用户层有客户端&#xff08;Client&#xff09;、服务端&#xff08;Server&#xff09;、服务管理&#xff08;ServiceManager&#xff09;。 从用户空间的角度&#xff0c;使用步骤如下&#xff08;…

基于springboot中小型制造企业质量管理系统源码和论文

信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自古以来的…

Flutter 权限申请

这篇文章是基于permission_handler 10.2.0版本写的 前言 在App开发过程中我们经常要用到各种权限&#xff0c;我是用的是permission_handler包来实现权限控制的。 pub地址&#xff1a;https://pub.dev/packages/permission_handler permission_handler 权限列表 变量 Androi…

MATLAB期末复习笔记(下)

五、数据和函数的可视化 1.MATLAB的可视化对象 图形对象是 MATLAB用来创建可视化数据的组件。每个对象都有一个名为句柄 的唯一标识符。使用该句柄&#xff0c;您可以通过设置对象 属性 来操作现有图形对象的特征 ROOT: &#xff1a;即电脑屏幕 Figure &#xff1a;图窗…

web安全从0到1:burp-suite3

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

深度学习:梯度下降法

损失函数 L&#xff1a;衡量单一训练样例的效果。 成本函数 J&#xff1a;用于衡量 w 和 b 的效果。 如何使用梯度下降法来训练或学习训练集上的参数w和b &#xff1f; 成本函数J是参数w和b的函数&#xff0c;它被定义为平均值&#xff1b; 损失函数L可以衡量你的算法效果&a…

Linux:文件系统inode

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

94.【C语言】解析预处理(2)

目录 1.带有副作用的宏参数 代码 一个判断最大值的宏代码 运行结果 分析 "副作用"的解释 2.宏替换规则 解释 3.宏和函数的对比 附一张对比表 承接93.【C语言】解析预处理(1)文章 1.带有副作用的宏参数 代码 一个判断最大值的宏代码 #define MAX(a, b) (…

Linux学习笔记12 systemd的其他命令

前文已经介绍了systemd在系统初始化中起到的作用和服务的管理和配置。这里补充一下systemd的其他工具和系统进程的管理 前文 Linux学习笔记10 系统启动初始化&#xff0c;服务和进程管理&#xff08;上&#xff09;-CSDN博客 Linux学习笔记11 系统启动初始化&#xff0c;服务…

vue3+ts+uniapp微信小程序顶部导航栏

这是colorui改的&#xff0c;不用就不用看啦 color-ui(https://docs.xzeu.com/#/) 新建component文件夹创建topNavigation.vue <template><view><view class"cu-custom" :style"height: CustomBar px"><view class"cu-bar…