Node.js实现短链接(ShortLink):shortid、epxress让URL更简单

ops/2024/9/20 7:27:30/ 标签: node.js, 短链接, shortid, epxress, shortLink, express, 长链接

文章目录

      • 一、短链接介绍
      • 二、插件介绍
      • 三、实现方案
        • 1、安装依赖:
        • 2、实现原理
      • 四、示例代码
      • 五、测试接口生成短链接

一、短链接介绍

短链接是指仅包含一个网址的链接形式,通俗一些就是将一个很长很复杂的的网址变成一个简短易记的链接。和长链接不同,长链接往往包含多个网址。短链接具有诸多优势,它不仅能够便捷地实现快速导航,还能有效避免过多重复的网址链接,进而提升网站页面的可访问性。

这样做好处在于:

  • url更加美观;
  • 便于保存和传播;
  • 某些网站内容发布有字数限制,短链接可以节约字数。

短链接的应用场景非常广泛,尤其是在网络营销中。以下是一些常见的应用场景:

  • 邮件营销:在邮件内容中插入短链接,便于用户点击和分享,提高点击率和转化率。
  • 社交媒体营销:在社交媒体上发布内容时,使用短链接可以吸引更多的关注和互动。
  • 广告推广:在广告中插入短链接,可以增加广告的曝光率和点击率,提高广告效果。
  • 内容营销:在文章、图片、视频等内容的下方添加短链接,便于用户分享和传播,同时也可以提高内容的曝光率。
  • 在线购物:在电商网站中,使用短链接可以引导用户到产品页面,增加购买转化率。

需要注意的是,在使用短链接时,需要遵守相关法律法规和隐私政策,确保用户隐私和安全。同时,需要合理控制发送频率和数量,避免过度打扰用户造成反感。

二、插件介绍

epxress_22">1、epxress

Express 是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能。

  • 安装
npm install express
  • 导入
const express = require('express')
  • 使用
const express = require('express')
const app = express()
const port = 3000app.get('/', (req, res) => {res.send('Hello World!')
})app.listen(port, () => {console.log(`Example app listening on port ${port}`)
})
shortid_53">2、shortid

ShortID插件是一款非常实用的工具,主要用于在应用程序中生成短格式的唯一标识符。

  • 默认情况下,7-14 URL友好字符:A-Z,a-z,0-9,_-
  • 支持cluster(自动),自定义种子,自定义字母
  • 可以生成任意数量的ID(无重复),甚至每天数百万
  • 应用程序可以重新启动任何次数,而无需重复ID
  • Mongo ID / Mongoose ID的流行替代品
  • 可在Node,io.js和Web浏览器中使用

使用

  • 安装
npm install shortid
  • 引入

CommonJS:

const shortid = require('shortid');

ES模块

import shortid from 'shortid'
  • API

生成唯一的ShortID,默认情况下,生成的ShortID长度为7个字符

const short_id = shortid.generate()

将生成长度为10的ShortID

const short_id = shortid.generate(10)

自定义生成标识符的字符集

const short_id = shortid.characters('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')

三、实现方案

1、安装依赖:

epxress 启动服务提供接口
shortid 生成唯一短码

npm install express
npm install shortid
2、实现原理
  • 为每个原链接生成不重复的唯一短链接
  • 将原链接和对应短链接成对保存到数据库
  • 访问短链接时,web服务器将目标重定向到对应的原链接

在这里插入图片描述

四、示例代码

这里只是为了演示,没有使用数据库存储。实际项目中你可以存放到数据库中。

//serve.js

import express from 'express'
import shortid from 'shortid'
const app = express()
app.use(express.json())// 存储短码和url的映射关系
const shortLinks = {'fd8xIoDC': {url: 'https://blog.csdn.net/shanghai597/article/details/138959931?spm=1001.2014.3001.5501',},'DDkq0YYh': {url: 'https://blog.csdn.net/shanghai597/article/details/138790221?spm=1001.2014.3001.5501',},'RwE11i_Ec': {url: 'https://blog.csdn.net/shanghai597/article/details/138911534?spm=1001.2014.3001.5501',},'DBWDvt2rkM': {url: 'https://blog.csdn.net/shanghai597/article/details/131593381?spm=1001.2014.3001.5502',}
}//生成短码 存入数据库
app.post('/createUrl', async (req, res) => {const { url } = req.bodyconst short_id = shortid.generate()shortLinks[short_id] = { url }res.send(`http://localhost:3000/${short_id}`)
})//重定向
app.get('/:shortUrl', async (req, res) => {const short_id = req.params.shortUrlconst result = shortLinks[short_id].urlif (result) {res.redirect(result)} else {res.send('Url not found')}
})app.listen(3000, () => {console.log('Server is running on port 3000')
})

五、测试接口生成短链接

在这里插入图片描述


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

相关文章

如何通过文档外发管控系统,实现重要数据的高效流转?

文档外发管控是指企业或组织对其内部文档的外发流程进行管理和控制的一系列措施,目的是为了保护企业的知识产权、商业秘密和客户信息等敏感数据。通常需要注意以下几个方面: 1.权限管理:确保只有授权人员可以访问和外发文档; 2.…

SpringCloud基础篇

文章目录 创建新模块拷贝yml配置文件修改配置文件的信息修改pom.xml文件启动入口拷贝相关文件接口文档配置配置启动项注册中心原理Nacos注册中心创建nacos数据库存储数据部署nacos在docker容器中 服务注册引入依赖配置Nacos地址启动 服务发现(调用)引入依赖配置nacos地址发现并…

DC/AC电源模块:为智能家居设备提供恒定的电力供应

BOSHIDA DC/AC电源模块:为智能家居设备提供恒定的电力供应 DC/AC电源模块是一种常见的电源转换器,它将直流电源(DC)转换为交流电源(AC),为智能家居设备提供恒定的电力供应。在智能家居系统中&a…

CSS|01 CSS简介CSS的3种书写方式注释

CSS简介 什么是CSS CSS(Cascading Style Sheet),层叠样式表 或者 级联样式表,简称样式表。CSS的作用 主要用来给 HTML网页 设置外观或者样式。CSS的语法规则 h1 {属性:属性值}注意:1. CSS代码是由选择器和一对括号…

C#根据类的public属性加载类中对应字段的XML

<?xml version"1.0" encoding"utf-8"?> <root><UserLogin ID"0" UserName"" UserPassWord"" Level"1" PowerName"默认用户" PowerID"0" Remark"" IsEnabled"…

零点到两点,我部署了一个es

一开始的准备 实在是水平有限&#xff0c;Clash虚拟机网出不去&#xff0c;研究了LAN方案&#xff0c;还在咸鱼买了一单&#xff0c;搞不定&#xff0c;没辙&#xff0c;那我老老实实下载tar包得了&#xff0c;就不docker了 下载安装 直接官网给它安个es https://www.elasti…

VScode Python debug:hydra.run.dir 写入launch.json

记录一个debug时的经验&#xff1a; VS code extension名称版本Pythonv2024.8.1Python Debuggerv2024.6.0 我配置的project运行 train.py 时需要在 terminal 输入参数 hydra.run.dirxxx 我想用 vscode debug 查看内部代码&#xff0c;按以往的经验需要将args写入launch.json&…

STM32 中断编程入门

目录 一、中断系统 1、中断的原理 2、中断类型 外部中断 定时器中断 DMA中断 3、中断处理函数 中断标志位清除 中断服务程序退出 二、实际应用 中断控制LED 任务要求 代码示例 中断控制串口通信 任务要求1 代码示例 任务要求2 代码示例 总结 学习目标&…

AI姓氏头像生成微信小程序系统源码

&#x1f525;【科技新潮流】AI姓氏头像生成系统&#xff0c;你的专属个性新名片&#xff01;&#x1f389; &#x1f31f; 开篇惊艳&#xff1a;一键解锁你的姓氏魅力 ✨ Hey小伙伴们&#xff0c;今天我要安利一个超酷炫的科技小玩意——AI姓氏头像生成系统&#xff01;是不…

Kubernetes中的etcd的备份和恢复实操

在Kubernetes中&#xff0c;etcd作为关键组件&#xff0c;承载着集群的状态信息&#xff0c;因此其备份和恢复机制至关重要。以下将进一步探讨etcd在Kubernetes中的备份和恢复方案&#xff0c;以确保集群的可靠性和数据的持久性。 ### etcd备份方案 #### 1. 定期快照备份 et…

VMware创建新虚拟机教程(保姆级别)

&#x1f4e2; 续上一篇 最新超详细VMware虚拟机安装完整教程-CSDN博客 &#xff0c;本章将详细讲解VMware创建虚拟机。 一、创建新的虚拟机 点击【创建新的虚拟机】&#xff01; 点击【自定义&#xff08;高级&#xff09;】> 下一步&#xff01; > 默认下一步&#x…

实现抽象方法、实现接口 题目

题目 JAVA25 实现抽象方法分析&#xff1a;代码&#xff1a; JAVA26 实现接口分析&#xff1a;代码&#xff1a; JAVA25 实现抽象方法 描述 已知抽象类Base中定义了calculate方法&#xff0c;该方法的计算过程依赖于sum()和avg()&#xff0c;而后两个方法均为抽象方法。要求定义…

android 是Application类先运行还是AndroidManifest.xml中action先运行?Application类先运行

android 是Application类先运行还是AndroidManifest.xml中action先运行 在Android应用启动过程中&#xff0c;Application类和AndroidManifest.xml中的action存在一个严格的初始化顺序。具体来说&#xff1a; Application类&#xff1a;在应用启动时&#xff0c;系统会首先实例…

vue长列表,虚拟滚动

1.新建子组件&#xff0c;将数据传递过去(几万条数据的数组&#xff0c;一次性展示多少条&#xff0c;每条数据的行高). <template><div class"vitualScroll"><sub-scroll :dataList"dataList" :rowCount"20" :rowHeight"2…

使用工业自动化的功能块实现大语言模型应用

大语言模型无所不能&#xff1f; 以chatGPT为代表的大语言模型横空出世&#xff0c;在世界范围内掀起了一场AI革命。给人的感觉似乎大模型语言无所不能。它不仅能够生成文章&#xff0c;图片和视频&#xff0c;能够翻译文章&#xff0c;分析科学和医疗数据&#xff0c;甚至可以…

node.js 面试题 1

### 明天要去面试了 今天晚上突击一下node.js 什么是Node.js&#xff1f;它有什么特点&#xff1f; Node.js是一个基于Chrome V8引擎的JavaScript运行环境&#xff0c;它允许在服务器端运行JavaScript代码。它的特点包括单线程、非阻塞I/O、事件驱动等 …

Ubuntu20安装mysql方法,适用于wsl

itopen组织1、提供OpenHarmony优雅实用的小工具2、手把手适配riscv qemu linux的三方库移植3、未来计划riscv qemu ohos的三方库移植 小程序开发4、一切拥抱开源&#xff0c;拥抱国产化 一、Ubunt20安装mysql 适用于wsl中安装mysql sudo apt update# 查看可使用的安装包…

通信技术在反无人机中的作用探析

智能无人系统使得无人机在某些特定任务和情境下可以实现一定程度的自治操作。但对于更复杂的任务和决策&#xff0c;如军事操作或灾害响应&#xff0c;即使无人机具有高级的人工智能&#xff0c;也可能需要人的干预。因此&#xff0c;通信技术在反无人机技术中起着关键的作用。…

VUE项目安全漏洞扫描和修复

npm audit 1、npm audit是npm 6 新增的一个命令,可以允许开发人员分析复杂的代码并查明特定的漏洞。 2、npm audit名称执行&#xff0c;需要包package.json和package-lock.json文件。它是通过分析 package-lock.json 文件&#xff0c;继而扫描我们的包分析是否包含漏洞的。 …

OpenCV 车牌检测

OpenCV 车牌检测 级联分类器算法流程车牌检测相关链接 级联分类器 假设我们需要识别汽车图像中车牌的位置&#xff0c;利用深度学习目标检测技术可以采取基于锚框的模型&#xff0c;但这需要在大量图像上训练模型。 但是&#xff0c;级联分类器可以作为预训练文件直接使用&…