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.body
    const 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.shortUrl
    const 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

相关推荐

  1. Redies

    2024-04-14 22:40:05       18 阅读
  2. Redies

    2024-04-14 22:40:05       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-14 22:40:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-14 22:40:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-14 22:40:05       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-14 22:40:05       20 阅读

热门阅读

  1. 算法中二分搜索详解

    2024-04-14 22:40:05       17 阅读
  2. 算法刷题记录 Day45

    2024-04-14 22:40:05       15 阅读
  3. Spring和Spring Boot的区别

    2024-04-14 22:40:05       14 阅读
  4. 嵌入式与移动物联网开发教程和案例

    2024-04-14 22:40:05       15 阅读
  5. Flink KafkaSource 启用动态分区检查

    2024-04-14 22:40:05       15 阅读
  6. Vue3常见核心面试题(之一)

    2024-04-14 22:40:05       15 阅读
  7. QT及C++中的构造函数与析构函数

    2024-04-14 22:40:05       17 阅读
  8. ccf201512-1数位之和

    2024-04-14 22:40:05       15 阅读
  9. @JvmDefaultWithout/WithCompatibility

    2024-04-14 22:40:05       14 阅读
  10. 什么是线程池,为什么要使用它?(企业真题)

    2024-04-14 22:40:05       16 阅读
  11. Python学习之-Pandas详解

    2024-04-14 22:40:05       16 阅读
  12. linux 常用的命令汇总

    2024-04-14 22:40:05       14 阅读