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 各个部分的对象。例如:

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

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

js 复制代码
{
      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()方法处理后的对象,而不是一个字符串。例如:

js 复制代码
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);

输出结果:

js 复制代码
{
      name: 'value',
      age: 20
 }

URL 格式化(构建新的 URL)

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

js 复制代码
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);

输出结果为:

js 复制代码
https://example.com:8080/path/to/file?name=value#fragment

实例

js 复制代码
//使用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

启动成功

相关推荐
摇滚侠8 小时前
搭建前端开发环境 安装 nodejs 设置淘宝镜像 最简化最标准版本 不使用 NVM NVM 高版本无法安装低版本 nodejs
java·开发语言·node.js
tumeng071116 小时前
Node.JS 版本管理工具 Fnm 安装及配置(Windows)
windows·node.js
xrkhy17 小时前
MacOS M3 安装nvm以及node.js
macos·node.js
xiaohe0718 小时前
Node.js NativeAddon 构建工具:node-gyp 安装与配置完全指南
node.js
不愿透露姓名的大鹏18 小时前
Linux环境下Node.js后台运行方式(实用版)
linux·运维·node.js
学习3人组18 小时前
windows系统下nvm的安装
node.js·nvm
sunwenjian88619 小时前
node.js下载、安装、设置国内镜像源(永久)(Windows11)
node.js
#做一个清醒的人19 小时前
Electron 保活方案:用子进程彻底解决原生插件崩溃问题
前端·electron·node.js
云天00119 小时前
前端私活神器,nodejs+vue3+typescript全栈框架,
前端·后端·node.js
吴声子夜歌20 小时前
Node.js——WebSocket
websocket·网络协议·node.js