当前位置: 首页 > 后端技术 > Node.js

Node短链原理及功能实现总结

时间:2023-04-03 17:52:38 Node.js

导语:有时候我们经常会在微博或者一些营销短信中看到很短的URL。当你打开它在浏览器中查看时,你会发现它跳转到了一个很长的URL。URL,它实际上是一种使用短URL的服务。今天结合自己之前开发的一个短链工具,结合经验和知识,简单做一个总结。目录原理说明实战演练方法实现原理说明短网址,又称短链接,是由域名加上唯一的字母或数字id组成的很短的网址,大概不超过10位数字。创建短URL创建短URL的方法如下:获取参数URL;检查是否存在,存在则返回短URL,不存在则创建短URL;,中间通过以下步骤:打开短网址,请求短网址服务器;根据唯一id读取数据库原始网址;执行302重定向到原始网站URL;中间可能统计访问者信息(IP、设备信息等),用于收集访问数据,便于决策;短网址使用短网址的好处如下:与大而长的网址相比,短网址看起来很舒服;短网址易于节省空间和数据库容量;短网址更安全,避免黑客直接攻击原站,减少DDOS和CC攻击;方法是使用命令行连接mysql创建表,然后创建一个短表。mysql-h127.0.0.1-P3306-udemo-pmysql>usedemo;Databasechangedmysql>showtables;+----------------+|Tables_in_demo|+--------------+|货物||user|+----------------+3rowsinset(0.00sec)mysql>CREATETABLE`short`(`id`int(11)NOTNULLCOMMENT'id',`sid`varchar(255)COLLATEutf8_unicode_ciNOTNULLCOMMENT'shortchaincode',`url`varchar(1046)NOTNULLCOMMENT'URL',)ENGINE=MyISAMDEFAULTCHARSET=utf8COLLATE=utf8_unicode_ciCOMMENT='shortURL';mysql>ALTERTABLE`short`CHANGE`id``id`INT(11)NOTNULLAUTO_INCREMENTCOMMENT'id';mysql>ALTERTABLE`short`ADDPRIMARYKEY(`id`);方法写法首先安装一个npm包,然后使用包的str10To64和shortId方法生成短链标识码。db方法在之前的文章中已经介绍过了。不知道的请回上一篇看npminstallxquuid创建短urlconstexpress=require('express');constapp=express();constdb=require('../model/simple');constxqsql=require('xqsql');constxquuid=require('xquuid');app.post('/s',async(req,res)=>{letbaseUrl='http://127.0.0.1:3000/秒/';让userId=10;让url=req.body.url;让urlReg=/(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/;if(!url){returnres.json({code:101,msg:'get_fail',data:{info:"网址不能为空!",}})}if(!(urlReg.test(url))){returnres.json({code:101,msg:'get_fail',data:{info:"网址格式错误!",}})}letgetSql=xqsql.get('short',{type:'one',key:'url',ids:[url],},'default','id,url,sid');让getSqlResult=awaitdb(getSql);if(getSqlResult.code==200&&getSqlResult.data.list.length==0){让sid=xquuid.str10To64(xquuid.shortId(userId));让shortUrl=`${baseUrl}${sid}`;让addParams=[{sid,url}]letaddFields=[{name:'ShortURL',value:'sid',isMust:true},{name:'OriginalURL',value:'url',isMust:true},]letaddSql=xqsql.add('短',addParams,addFields);让addSqlResult=awaitdb(addSql);if(addSqlResult.code==200){returnres.json({code:200,msg:'get_succ',data:{info:"创建成功!",url:shortUrl}});}else{returnres.json(addSqlResult);}}else{returnres.json({code:101,msg:'get_fail',data:{info:"URL已经存在!",url:`${baseUrl}${getSqlResult.data.list[0].sid}`}})}})访问短网址//访问短链接app.get('/s/:sid',async(req,res)=>{letsid=req.params.sid;if(!sid){returnres.json({code:101,msg:'get_fail',data:{info:"短链接不能为空!",}})}letgetSql=xqsql.get('short',{type:'one',key:'sid',ids:[sid],},'default','id,url');letgetSqlResult=awaitdb(getSql);if(getSqlResult.code==200&&getSqlResult.data.list.length){leturl=getSqlResult.data.list[0].url;res.redirect(url);}else{returnres.json({code:101,msg:'get_fail',data:{info:"ShortURLdoesnotexist!"}})}})实用练习在这里找两个长网址:http://www.51yuansu.com/sc/vsvhhktgav.htmlhttps://baijiahao.baidu.com/s?id=1704505053721054995&wfr=spider&for=pchttps://mp.weixin.qq.com/s?src=11×tamp=1625549401&ver=3173&signature=N5D9x59A5A1rhcpac3ujtOEu51niWlSwkna6186uwcvDZl2reuDxNFwv8fQOfOtLuV5XRQkJ6xSVAfWR5lpsSwDRpA3y6CIPLGT5xW21OL2BvJxsA*TvCwkEeX4v1SWr&new=1postman创建首先打开postman,输入一个长网址,发送请求后得到如下内容:访问短网址复制生成的短链进行访问基本上的演示就到这里了,如果你觉得想要更短URL,thenyoucanbuyadomainname,resolveittothenodeserver,suchas:url.me,thenbuyaserver,analyzeit,andusenginxtoconfigureareverseproxy.upstreamshortSite{server127.0.0.1:3000weight=1;}server{listen80;server_nameurl.me;location/{proxy_passhttp://shortSite/s/;proxy_set_headerHost$host;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;proxy_set_headerX-Forwarded-Proto$scheme;}}ThentrytovisittheaboveURLhttp://url.me/13mmandyoucanseethatitlooksmuchbetter.Well,theshortchainknowledgeisintroducedhere,ifyoufindanyproblems,pleaseaskquestionsintime.