0
点赞
收藏
分享

微信扫一扫

快速低成本搭建一个短链接服务系统

短链接我们或多或少都使用过,所谓短链接就是根据较长的原链接url生成一段较短的链接,访问短链接可以跳转到对应的原链接,这样做好处在于:1. url更加美观;2. 便于保存和传播;3. 某些网站内容发布有字数限制,短链接可以节约字数。
短链接实现的原理非常简单,可以概括为:
1、为每个原链接生成不重复的唯一短链接
2、将原链接和对应短链接成对保存到数据库
3、访问短链接时,web服务器将目标重定向到对应的原链接
一般通过以上步骤即可搭建短链接系统,如下面描述的那样:

一、初始化项目

(1). 安装如下依赖:
package.json:
"dependencies": {
"config": "^3.2.2", // 读取项目配置
"express": "^4.17.1", // web服务器
"mongoose": "^5.6.9", // 操作mongodb
"shortid": "^2.2.14", // 生成不重复的唯一Id
"valid-url": "^1.0.9" // 判断url格式是否正确
}
(2). 增加项目配置:
主要用于存放MongoDB的连接字符串和短链接的base url。
config/default.json:
{
"mongoURI": "mongodb://localhost:27017/url-shorten-service",
"baseUrl": "http://localhost:5000"
}
(3). 增加MongoDB连接方法
config/db.js:
const mongoose = require('mongoose');
const config = require('config');
const db = config.get('mongoURI');

const connectDB = async () => {
try {
await mongoose.connect(db, {
useNewUrlParser: true
});
console.log(​​MongoDB Connected to: ${db}​​);

} catch (error) {
console.error(error.message);
process.exit(1);
}
}

module.exports = connectDB;
(4). 启动express:
index.js:
const express = require('express');
const connectDB = require('./config/db');

const app = express();

// 连接MongoDB
connectDB();

app.use(express.json({
extended: false
}));

// 路由,稍后设置
app.use('/', require('./routes/index'));
app.use('/api/url', require('./routes/url'));

const port = 5000;

app.listen(port, () => {
console.log(​​​Server running on port ${port}​​​);
});

二、定义数据库模型

我们需要将原链接和对应短链接保存到数据库,简单起见,我们只需要保存一个短链接编码,相应的短链接可以使用base url和编码拼接而成。

三、生成短链接编码

这是我们实现的关键一步,思路是:用户传入一个长链接,我们首先使用 valid-url 判断传入的url是否合法,不合法则返回错误,如果合法我们在数据库中搜索是否有该长链接的记录,如果有则直接返回该条记录,如果没有则生成一条新记录,并生成对应的短链接。

四、访问短链接跳转到原链接

最后一步非常简单,当用户访问我们生成的短链接时,我们根据url中的短链接编码查询到对应记录,如果存在对应记录我们使用express的res.redirect方法将访问重定向至原链接,如果不存在则返回错误。

以上是搭建短链系统的几个基本步骤,从整体流程上还是比较简单快速,不过还是需要一段时间去测试编写代码,并且需要人力成本去维护。随着短链接逐渐被人们所认可,现在也有些现成的平台可以去生成、跳转和统计跳转量,​缩链就是其中一个比较稳定的平台,支持个性化开发和布署,维护成本低,还支持绑定自有域名。​​缩链,除在短链接生成和跳转方面持续精进,更在推广数据采集与专业统计上迈上新台阶。用户访问数据可分时段统计,可按用户访问地域分布、设备类型分布、访问来源分布(流量渠道、社群软件等)等维度进行数据采集与统计,并提供推广数据变化趋势图。​可以在百度中搜索“​缩链​”了解更多更的信息。

举报

相关推荐

0 条评论