当前位置: 首页 > news >正文

【Node.js】短链接

原文链接:Nodejs 第六十二章(短链接) - 掘金 (juejin.cn)

短链接是一种缩短长网址的方法,将原始的长网址转换为更短的形式。短链接的主要用途之一是在社交媒体平台进行链接分享。由于这些平台对字符数量有限制,长网址可能会占用大量的空间,因此使用短链接可以节省字符数。原理就是使用重定向到原网站。

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`)
) 
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

相关文章:

  • 无线游戏手柄的测试(Windows11系统手柄调试方法)
  • 构建高可用性数据库架构:深入探索Oracle Active Data Guard(ADG)
  • 【Leetcode每日一题】 递归 - 二叉树剪枝(难度⭐⭐)(50)
  • DataLoader的使用
  • RabbitMQ3.13.x之七_RabbitMQ消息队列模型
  • 如何在Flutter应用中配置ipa Guard进行混淆
  • Spring之事务底层源码解析
  • 懒人必备!4个PS抠图技巧,让你轻松处理复杂背景!
  • 使用阿里云试用Elasticsearch学习:2.3 深入搜索——多字段搜索
  • JDK安全剖析之安全处理入门
  • 实践笔记-03 docker buildx 使用
  • 风电场智能化转型基于ARM工控机的HDMI数据实时监控显示
  • 牛客错题整理——C++
  • Android 应用启动过程
  • 交换机与队列的介绍
  • python3.6+scrapy+mysql 爬虫实战
  • 0基础学习移动端适配
  • Android框架之Volley
  • crontab执行失败的多种原因
  • CSS3 变换
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Flannel解读
  • Javascript编码规范
  • Java多态
  • NSTimer学习笔记
  • oschina
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • vue-router的history模式发布配置
  • webpack4 一点通
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 基于Android乐音识别(2)
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 一起参Ember.js讨论、问答社区。
  • 栈实现走出迷宫(C++)
  • 主流的CSS水平和垂直居中技术大全
  • #、%和$符号在OGNL表达式中经常出现
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #WEB前端(HTML属性)
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (2)nginx 安装、启停
  • (2015)JS ES6 必知的十个 特性
  • (7)STL算法之交换赋值
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (九)信息融合方式简介
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (三) diretfbrc详解
  • (一)为什么要选择C++
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .gitignore文件—git忽略文件
  • .NET中的十进制浮点类型,徐汇区网站设计
  • .sh 的运行
  • /3GB和/USERVA开关
  • /etc/fstab 只读无法修改的解决办法