Nodejs 第六十二章(短链接)

短链接介绍

短链接是一种缩短长网址的方法,将原始的长网址转换为更短的形式。它通常由一系列的字母、数字和特殊字符组成,比起原始的长网址,短链接更加简洁、易于记忆和分享。

短链接的主要用途之一是在社交媒体平台进行链接分享。由于这些平台对字符数量有限制,长网址可能会占用大量的空间,因此使用短链接可以节省字符数,并且更方便在推特、短信等限制字数的场景下使用。

另外,短链接还可以用于跟踪和统计链接的点击量。通过在短链接中嵌入跟踪代码,网站管理员可以获得关于点击链接的详细统计数据,包括访问量、来源、地理位置等信息。这对于营销活动、广告推广或分析链接的效果非常有用。

例如 短信

image.png

00f362cb8318ee9ad5438e77f5c34b3.png

实现原理大致就是生成一个唯一的短码,利用重定向,定到原来的长连接地址。

代码实现

所需的依赖

  1. epxress 启动服务提供接口
  2. mysql2 knex依赖连接数据库
  3. knex orm框架操作mysql
  4. shortid 生成唯一短码

数据库设计

CREATE TABLE `short` (`id` int NOT NULL AUTO_INCREMENT COMMENT 'Primary Key', `short_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '短码', `url` varchar(255) NOT NULL COMMENT '网址',PRIMARY KEY (`id`)
) 

nodejs端

import knex from 'knex'
import express from 'express'
import shortid from 'shortid'
const app = express()
app.use(express.json())
const db = knex({client: 'mysql2',connection: {host: 'localhost',user: 'root',password: '123456',database: 'short_link'}
})
//生成短码 存入数据库
app.post('/create_url', async (req, res) => {const { url } = req.bodyconst short_id = shortid.generate()const result = await db('short').insert({ short_id, url })res.send(`http://localhost:3000/${short_id}`)
})
//重定向
app.get('/:shortUrl', async (req, res) => {const short_id = req.params.shortUrlconst result = await db('short').select('url').where('short_id', short_id)if (result && result[0]) {res.redirect(result[0].url)} else {res.send('Url not found')}
})app.listen(3000, () => {console.log('Server is running on port 3000')
})

测试

生成之后的链接

image.png

访问链接 重定向到目标网址

image.png

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

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

相关文章

人工智能:更多有用的 Python 库

​ 目录 推荐 JupyterLab 入门 复杂的矩阵运算 其它人工智能和机器学习的 Python 库 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 在进入主题之前,我们先讨论几个人…

利用Sentinel解决雪崩问题(二)隔离和降级

前言: 虽然限流可以尽量避免因高并发而引起的服务故障,但服务还会因为其它原因而故障。而要将这些故障控制在一定范围避免雪崩,就要靠线程隔离(舱壁模式)和熔断降级手段了,不管是线程隔离还是熔断降级,都是对客户端(调…

太赫兹探测器是太赫兹技术应用核心器件之一 我国研究成果不断增多

太赫兹探测器是太赫兹技术应用核心器件之一 我国研究成果不断增多 太赫兹探测器,是太赫兹(THz)应用的基础,是太赫兹成像、太赫兹通信等系统的核心器件,其性能直接决定太赫兹系统的优劣,地位极为重要&#x…

2024年同城网总流量全新生态,个人工作室落地式游戏玩法,单账户月入3万

我要为大家解读的是本地生活新项目,这个业务模式中,即使是低收入的玩法,一个月赚取万儿八千也是完全可行的。而高收入的玩法,一单的收入甚至能超过一万。目前,你的圈子里已经有一些同行业的人开始以个人工作室的形式去…

【机器学习】数学基础详解

线性代数:构建数据的骨架 数学对象 标量(Scalar) 标量是最基本的数学对象,代表了单个的数值,无论是整数还是实数。在机器学习中,标量可以用来表示一个模型的单个参数,如偏差(bias&…

Collection与数据结构 Stack与Queue(二):队列与Queue

1. 队列 1.1 概念 只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作…

免费https详细教程

简单叙述一下https的定义和实现https的一些基本作用,然后会给到申请SSL证书的方式以及安装部署流程,最终实现网站的https访问。 随着互联网的快速发展,网络安全问题日益凸显。在互联网上传输敏感信息、进行在线交易和共享个人数据时&#xf…

09 Php学习:数组和排序

数组概念 在PHP中,数组是一种复合数据类型,用于存储多个值。以下是关于PHP数组的详细解释: 索引数组:索引数组是最基本的数组类型,其中每个元素都有一个唯一的数字索引,从0开始递增。 关联数组&#xff…

Qt for MCUs 2.7正式发布

本文翻译自:Qt for MCUs 2.7 released 原文作者:Qt Group高级产品经理Yoann Lopes 翻译:Macsen Wang Qt for MCUs的新版本已发布,为Qt Quick Ultralite引擎带来了新功能,增加了更多MCU平台的支持,并且我们…

概率论基础——拉格朗日乘数法

概率论基础——拉格朗日乘数法 概率论是机器学习和优化领域的重要基础之一,而拉格朗日乘数法与KKT条件是解决优化问题中约束条件的重要工具。本文将简单介绍拉格朗日乘数法的基本概念、应用以及如何用Python实现算法。 1. 基本概念 拉格朗日乘数法是一种用来求解…

Golang 开发实战day08 - Multiple Return values

🏆个人专栏 🤺 leetcode 🧗 Leetcode Prime 🏇 Golang20天教程 🚴‍♂️ Java问题收集园地 🌴 成长感悟 欢迎大家观看,不执着于追求顶峰,只享受探索过程 Golang 教程08 - Multiple R…

第⑬讲:OSD硬盘故障处理实战:从诊断到恢复的全流程指南

文章目录 1.OSD坏盘更换操作2.判断OSD是否出现故障的思路3.模拟osd.5故障4.OSD故障更换硬盘流程4.1.将故障的osd.5从集群中删除4.1.1.从OSD Map中将故障的OSD删除4.1.2.从Crush Map中将故障的OSD删除4.1.3.在OSD列表中将故障的OSD删除4.1.4.将故障的OSD认证信息删除4.1.5.验证集…

羊大师带你了解春季喝羊奶有什么好处

在春季,随着大自然的苏醒,人们的生活方式也逐渐转向更加活跃和健康的模式。在众多健康习惯中,饮用羊奶成为了一个流行的选择,因其独特的营养价值和健康益处受到了广泛关注。羊奶不仅富含高质量的蛋白质和必需氨基酸,还…

用html实现一个动态的文字框

<!DOCTYPE html> <html lang"en" > <head><meta charset"UTF-8"><title>一个动态的文字框动画</title><link rel"stylesheet" href"./style.css"></head> <body> <link rel…

计算机视觉 | 基于 ORB 特征检测器和描述符的全景图像拼接算法

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本项目实现了基于 ORB 特征检测器和描述符的全景图像拼接算法&#xff0c;能够将两张部分重叠的图像拼接成一张无缝连接的全景图像。 文章目录 一、随机抽样一致算法二、功能实现三、代码解析四、效果展示五、完整代码 一、随机…

MySQL-创建和管理表:基础知识、创建和管理数据库、创建表、修改表、重命名表、删除表、清空表、拓展

创建和管理表 1. 基础知识1.1 一条数据存储的过程1.2 标识符命名规则1.3 MySQL中的数据类型 2. 创建和管理数据库2.1 创建数据库2.2 使用数据库2.3 修改数据库2.4 删除数据库 3. 创建表3.1 创建方式13.2 创建方式23.3 查看数据表结构 4. 修改表4.1 追加一个列4.2 修改一个列4.3…

卷积神经网络(CNN)的数学原理解析

文章目录 前言 1、介绍 2、数字图像的数据结构 3、卷积 4、Valid 和 Same 卷积 5、步幅卷积 6、过渡到三维 7、卷积层 8、连接剪枝和参数共享 9、卷积反向传播 10、池化层 11、池化层反向传播 前言 本篇主要分享卷积神经网络&#xff08;CNN&#xff09;的数学原理解析&#xf…

解决 OpenERP v7 中的报告问题

在 OpenERP v7 中&#xff0c;报告问题可能涉及多个方面&#xff0c;包括报告模板的设计、数据源的配置、报告生成的逻辑等。然后再我们日常使用中还是会遇到各种各样的问题&#xff0c;那么如果出现下面的错误&#xff0c;可以尝试用我的解决方案。 1、问题背景 在使用 OpenE…

微服务-2 Eureka

Eureka 启动页面&#xff1a; 同理再注册完order-service后&#xff0c;刷新启动页面&#xff1a; userservice 启动多台服务&#xff1a; [ 代码 ]&#xff1a;orderService.java&#xff08;用 RestTemplate 调其他服务&#xff0c;用 userservice 代替 localhost:8081&…

LiveGBS流媒体平台GB/T28181常见问题-系统服务日志如何配置日志个数日志路径日志时长web操作日志操如何配置保留天数及过滤

LiveGBS系统服务日志如何配置日志个数日志路径日志时长web操作日志操如何配置保留天数及过滤 1、系统服务日志1.1、日志目录1.2、配置日志文件个数及记录时间1.3、配置日志文件路径 2、Web 操作日志2.1、配置保留天数2.2、配置不记录操作日志2.1.1、不记录所有2.1.2、不记录指定…