什么是短网址?🧐
短网址的诞生原因?
说起短网址(短链接),很多人都已不再陌生。
不过想要把一串长长的网址,缩短成精简的链接,却没那么简单。
短网址最核心的就是如何让用户请求的是短链接而响应的确是长链接的内容?
长网址通过特殊的算法缩小到 一定长度,然后利用DB或者其他存储系统(这里是为了能够更快的响应)把长链接和短链接相互映射。
经过一段时间的摸索,已经搞定算法这个最艰难的步骤,分享出来给大家🤓
一、先简单封装一个过滤非法链接
1// 过滤非法网址 2 filter_url (url) { 3 var chinese_reg = /(http[s]?:\/\/[^ ]+)/ 4 5 if (url.trim().length === 0) { 6 console.log('请输入长网址!'); 7 return 8 } else if (!chinese_reg.test(url)) { 9 console.log('请输入正确的长网址'); 10 return 11 } 12 return url 13 }
二、在初始化方法中写入这个实例共用的数据
1// 初始化方法 2 constructor () { 3 // token 4 this.token = "Z1QljZOZiT4NTG" 5 6 // 请求地址 7 this.req_url = 'http://api.txapi.cn/v1/short_url/tcn' 8 9 // 需要缩短的长网址 10 this.request_url = '' 11 }
三、在封装一个run函数,让整个示例跑起来🤓
1// run函数 2 run (url) { 3 4 this.request_url = this.filter_url(url) 5 6 if(!this.request_url){ 7 return 8 } 9 10 this.shorten_url(this.req_url, this.token, this.request_url).then(res => { 11 console.log(res); // 查询结果 12 }) 13 }
最后附上完整代码😉
1const axios = require('axios') 2 3class Parse { 4 // 初始化方法 5 constructor () { 6 // token 7 this.token = "Z1QljZOZiT4NTG" 8 9 // 请求地址 10 this.req_url = 'http://api.txapi.cn/v1/short_url/tcn' 11 12 // 需要缩短的长网址 13 this.request_url = '' 14 } 15 16 // 缩短网址 17 shorten_url (url, token, data) { 18 let p = new Promise(function (resolve, reject) { 19 axios({ 20 url: url, 21 method: 'GET', 22 params: { 23 token: token, 24 url: data 25 } 26 }).then(resp => { 27 if(resp.data.code != 200 && resp.data.msg != "ok"){ 28 console.log("查询失败") 29 } else { 30 resolve(resp.data) 31 } 32 }) 33 }) 34 return p 35 } 36 37 // 过滤非法网址 38 filter_url (url) { 39 var chinese_reg = /(http[s]?:\/\/[^ ]+)/ 40 41 if (url.trim().length === 0) { 42 console.log('请输入长网址!'); 43 return 44 } else if (!chinese_reg.test(url)) { 45 console.log('请输入正确的长网址'); 46 return 47 } 48 return url 49 } 50 51 // run函数 52 run (url) { 53 54 this.request_url = this.filter_url(url) 55 56 if(!this.request_url){ 57 return 58 } 59 60 this.shorten_url(this.req_url, this.token, this.request_url).then(res => { 61 console.log(res); // 查询结果 62 }) 63 } 64} 65 66if(__filename === process.mainModule.filename) { 67 // new一个Parse对象 68 const p = new Parse() 69 70 // 调用run方法 71 p.run('https://www.baidu.com/') 72}