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

三步带你开发一个短链接生成平台

时间:2023-04-03 14:23:22 Node.js

三步指导您开发短链接生成平台Developer。【葡萄城社区】公众号前端开发时,有个功能需要使用网页授权认证地址生成二维码,但是像下面这样的Url,看https也头疼://open.weixin.qq.com/co..._uri=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&response_type=code&scope=snsapi_base&state=STATE&connect_redirect=1#wechat_redirect这个地址生成的二维码也是密密麻麻的,虽然不影响微信长按到扫描二维码,一旦二维码的尺寸缩小一点,图片会立即模糊,导致相机直接扫描二维码时难以识别。遇到这种情况,我们自然会想到,如果我们使用短链接来减少url的字符,那么生成的代码自然会变得更容易识别,同时也会让url更加美观,便于转发。目前市面上有微博的t.cn和一些第三方的短链接生成工具,但是这两类工具在使用上都存在一些问题。比如t.cn现在的规则是会有一个转账页面没有会直接跳转,而且因为第三方工具是公众平台,有时候可能会因为一些不良信息导致整个平台无法访问.与其这样,不如我们自己实现一个短链接平台。实现短链接平台原理上也很简单,搞定两部分即可:1、保存长短链接的对应关系。2、通过短链接查询长连接,重定向。为了效率,我使用的是node和mongodb,所以让我们开始吧。首先我们先创建一个express项目express-edemochange目录:>cddemoinstalldependencies:>npminstallruntheapp:>SETDEBUG=demo:*&npmstart然后进入demo目录安装express必要的依赖npminstallat同时npminstallmongoose、shortid和body-parser我们需要用到的,执行起来也很高效,因为执行效率高,开销小,但是如果用其他数据库就没问题了。这里的mongoose是npm的一个包,主要为程序提供连接mongodb以及增删改查的功能。使用shortid可以生成不重复指定字符的代码,方便我们生成类似xxx.com/ngTsfdgh红色部分的代码。由于我们生成短链接的API使用的是post方法,所以可以使用body-parser来扩展解析body编码类型的能力。首先设置MongoDB的连接信息module.exports={mongo\_base\_connection_url:'mongodb://localhost:27017',mongo_db:'mongodb://localhost:27017/shorturl',mongo_options:{autoReconnect:true,keepAlive:true,reconnectTries:50,reconnectInterval:1000,connectTimeoutMS:5000000,}}console.log("Connectionlocalmongodb");数据库模型定义因为我们的对应关系需要通过短链接查询长连接,所以这里我们主要使用主要存储短链接和长链接。另外,还可以根据自己的需要添加链接点击统计等字段,方便后期统计。  varmongoose=require('猫鼬');varSchema=mongoose.Schema;varurlSchema=newSchema({shortUrl:String,longUrl:String});module.exports=mongoose.model('UrlTable',urlSchema);定义快速路由因为我们在这个应用中只有生成和重定向两个功能,所以这里只有两个页面就可以完成所有的工作。  varindex=require('./routes/index');varurl=require('./routes/url');app.use('/',index);app.use('/url',网址);生成短链接页面constexpress=require("express");constrouter=express.Router();constshortId=require('shortid');constUrlTable=require('../models/urltable');constmongoose=require('mongoose');varsetup=require('../dbconfig/db');router.post('/',function(req,res,next){varparams=req.body;varurl=params.longUrl;shortId.characters('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ^*')varshortid=shortId.generate();varobjurl={shortUrl:shortid,longUrl.db,urlconset}ect(setup.mongo\_options);UrlTable.create(objurl,function(err,objurl){//if(err)console.log(err);res.send("http://localhost:3000/"+shortid);});return;});指定生成shortId字符的范围,生成:shortId.characters('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')varshortid=shortId.generate();为数据库建立满足要求的数据模型:varobjurl={shortUrl:shortid,longUrl:url};最后连接数据库并保存后,将短链接结果返回给客户端:mongoose.connect(setup.mongo_db,setup.mongo_options);UrlTable.create(objurl,function(err,objurl){//if(err)console.log(err);res.send("http://localhost:3000/"+shortid);});短链接跳转页面constexpress=require("express");constrouter=express.Router();constUrlTable=require('../models/urltable');constmongoose=require('猫鼬');varsetup=require('../dbconfig/db');router.get('/:shortUrl',function(req,res,next){varshortUrl=req.params.shortUrl;mongoose.connect(setup.mongo\_db,setup.mongo\_options);UrlTable.findOne({shortUrl:shortUrl}).then((result)=>{//待添加错误处理res.redirect(result.longUrl);})});module.exports=router;这个页面是为了快速跳转,我们就用get来接收参数,这个页面的功能很简单,拿参数查询跳转接收短链接代码varshortUrl=req.params.shortUrl;连接数据库查询并跳转mongoose.connect(setup.mongo_db,setup.mongo_options);UrlTable.findOne({shortUrl:shortUrl}).then((result)=>{//待添加的错误处理res.redirect(result.longUrl);})后期可以对一些错误做一些增强还有异常处理,数据统计等等,这里就不做补充了。让我们启用该应用程序并开始测试。  启动应用,测试npmstart,默认访问端口为3000,我们先测试短链接生成页面,这里贴一个长链接参数,名称为longUrl,数据对象为:{"longUrl":"https://demo.grapecity.com.cn/spreadjs/SpreadJSTutorial/features/tables/basic-table/purejs"}  成功升级到如下短链接:http://localhost:3000/iGE6ZlDmh我们只需要通过访问短链接可以正常跳转到保存的长链接。  这样,测试就通过了。其实代码量不大,原理也很简单。如果你有一个更短的域名,上线后链接会变得更短更漂亮,这样一个属于我们的短链接生成平台已经开发完成。下面附上源码,执行npminstall即可自动安装所有依赖。有什么问题可以在评论区告诉我。源码下载>>