Node短链原理与功能实现总结
2021/7/7 20:05:37
本文主要是介绍Node短链原理与功能实现总结,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
导语:有时候我们经常在微博或者某些营销短信中看见非常短小的网址,当你打开它在游览器查看时,发现跳转到了一个非常长的网址,这其实就是用到了短网址的服务。今天,我就简单的做一个总结,结合我之前开发的一个短链工具进行经验知识总结。
目录
- 原理说明
- 方法实现
- 实战演练
原理说明
短网址,又叫短链,也就是一个非常短的网址,由域名加唯一id字母或数字字符混合组成,大概不超过10位数。
短网址创建
短网址创建方法如下:
- 获取参数网址;
- 查询是否存在,存在返回短网址,不存在创建短网址;
- 访问短网址时候,查询数据库原网址作302;
短网址展示
短网址从打开到展现网页,中间经过以下步骤:
- 打开短网址后请求短网址服务器;
- 根据唯一id读取数据库原站网址;
- 进行302重定向到原站网址;
中间可能会统计访问者信息(IP,设备信息等),用来收集访问数据,便于决策;
短网址作用
使用短网址的好处有以下几个方面:
- 短网址比起一大段长长的网址来说,看起来很舒服;
- 短网址容易节省空间和数据库容量;
- 短网址比较安全,避免黑客直接攻击原站,减小DDOS,CC攻击;
方法实现
建表
使用命令行连接mysql,然后建立一张short
表。
mysql -h 127.0.0.1 -P 3306 -u demo -p
mysql> use demo; Database changed mysql> show tables; +----------------+ | Tables_in_demo | +----------------+ | goods | | user | +----------------+ 3 rows in set (0.00 sec) mysql> CREATE TABLE `short` ( `id` int(11) NOT NULL COMMENT 'id', `sid` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '短链码', `url` varchar(1046) NOT NULL COMMENT '网址', ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='短网址'; mysql> ALTER TABLE `short` CHANGE `id` `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'id'; mysql> ALTER TABLE `short` ADD PRIMARY KEY(`id`);
方法编写
首先,先安装一个npm包,然后使用包的str10To64
以及shortId
方法,生成短链识别码
db
方法,前几篇已经介绍过,不会的请返回前面文章查看
npm install xquuid
- 创建短网址
const express = require('express'); const app = express(); const db = require('../model/simple'); const xqsql = require('xqsql'); const xquuid = require('xquuid'); app.post('/s', async (req, res) => { let baseUrl = 'http://127.0.0.1:3000/s/'; let userId = 10; let url = req.body.url; let urlReg = /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/; if (!url) { return res.json({ code: 101, msg: 'get_fail', data: { info: "网址不能为空!", } }) } if (!(urlReg.test(url))) { return res.json({ code: 101, msg: 'get_fail', data: { info: "网址格式错误!", } }) } let getSql = xqsql.get('short', { type: 'one', key: 'url', ids: [url], }, 'default', 'id,url,sid'); let getSqlResult = await db(getSql); if (getSqlResult.code == 200 && getSqlResult.data.list.length == 0) { let sid = xquuid.str10To64(xquuid.shortId(userId)); let shortUrl = `${baseUrl}${sid}`; let addParams = [ { sid, url } ] let addFields = [ { name: '短网址', value: 'sid', isMust: true }, { name: '原网址', value: 'url', isMust: true }, ] let addSql = xqsql.add('short', addParams, addFields); let addSqlResult = await db(addSql); if (addSqlResult.code == 200) { return res.json({ code: 200, msg: 'get_succ', data: { info: "创建成功!", url: shortUrl } }); } else { return res.json(addSqlResult); } } else { return res.json({ code: 101, msg: 'get_fail', data: { info: "网址已存在!", url: `${baseUrl}${getSqlResult.data.list[0].sid}` } }) } })
- 访问短网址
// 访问短链 app.get('/s/:sid', async (req, res) => { let sid = req.params.sid; if (!sid) { return res.json({ code: 101, msg: 'get_fail', data: { info: "短链接不能为空!", } }) } let getSql = xqsql.get('short', { type: 'one', key: 'sid', ids: [sid], }, 'default', 'id,url'); let getSqlResult = await db(getSql); if (getSqlResult.code == 200 && getSqlResult.data.list.length) { let url = getSqlResult.data.list[0].url; res.redirect(url); } else { return res.json({ code: 101, msg: 'get_fail', data: { info: "短网址不存在!" } }) } })
实战演练
长网址寻找
这里在网上找到两个:
http://www.51yuansu.com/sc/vsvhhktgav.html
https://baijiahao.baidu.com/s?id=1704505053721054995&wfr=spider&for=pc
https://mp.weixin.qq.com/s?src=11×tamp=1625549401&ver=3173&signature=N5D9x59A5A1rhcpac3ujtOEu51niWlSwkna6186uwcvDZl2reuDxNFwv8fQOfOtLuV5XRQkJ6xSVAfWR5lpsSwDRpA3y6CIPLGT5xW21OL2BvJxsA*TvCwkEeX4v1SWr&new=1
postman创建
- 首先打开postman,输入一个长网址,发送请求后得到如下内容:
访问短网址
复制生成的短链进行访问
基本上的演示就到这里了,如果你觉得想要更短的网址,那你可以购买一个域名,解析到这个node服务器上面来。
比如:url.me
,然后买一台服务器,解析一下,使用nginx
配置一下反向代理。
upstream shortSite { server 127.0.0.1:3000 weight=1; } server { listen 80; server_name url.me; location / { proxy_pass http://shortSite/s/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
这样再试着访问一下上面的网址http://url.me/13mm
可以看到确实好看多了。
好了,短链的知识就介绍到这里,如果有发现问题的,及时提问。
这篇关于Node短链原理与功能实现总结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-22项目:远程温湿度检测系统
- 2024-12-21《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》简介
- 2024-12-21后台管理系统开发教程:新手入门全指南
- 2024-12-21后台开发教程:新手入门及实战指南
- 2024-12-21后台综合解决方案教程:新手入门指南
- 2024-12-21接口模块封装教程:新手必备指南
- 2024-12-21请求动作封装教程:新手必看指南
- 2024-12-21RBAC的权限教程:从入门到实践
- 2024-12-21登录鉴权实战:新手入门教程
- 2024-12-21动态权限实战入门指南