现在各大主流平台短网址服务都已经不对外开放了,下面介绍一个自己实现的方法,可以给自己使用。

先贴上项目链接:https://t.dst.mba

一、准备环境

  • Nodejs
  • Sequelize
  • Vue
  • Nuxt

二、项目搭建

前端 + 服务端这边直接使用了nuxt,官网:https://nuxtjs.org;

# 初始化项目
npm init nuxt-app <project-name>

这边前端页面逻辑比较简单,就是提交网址做一个校验然后传给服务端,这里就不赘述了。

首先根目录创建util,创建以下文件

// 用于生成短链接的随机id
const shortId = require('shortid');module.exports = (sequelize, DataTypes) => {const ShortUrlModel = sequelize.define('ShortUrlModel', {full: {type: DataTypes.STRING},short: {type: DataTypes.STRING,defaultValue: shortId.generate},})ShortUrlModel.associate = function (models) {}return ShortUrlModel}
// config.js
const path = require('path');module.exports = {db: {database: process.env.DB_NAME || 'shorturl',user: process.env.DB_USER || 'shorturl',password: process.env.DB_PASS || 'shorturl',options: {dialect: process.env.DIALECT || 'sqlite',host: process.env.HOST || 'localhost',storage: path.resolve(__dirname, './shorturl.sqlite')}}
}
// db.js
const {Sequelize} = require('sequelize');
const config = require('./config.js');
const fs = require('fs');
const path = require('path');
const db = {};const sequelize = new Sequelize(config.db.database,config.db.user,config.db.password,config.db.options
);fs.readdirSync(__dirname).filter((file) =>file !== 'index.js').forEach((file) => {const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes)db[model.name] = model})Object.keys(db).forEach(function (modelName) {console.log(Object.keys(db))if ('associate' in db[modelName]) {db[modelName].associate(db)}
})db.sequelize = sequelize;
db.Sequelize = Sequelize;module.exports = db;

根目录新建server-middleware文件夹,新增一个middleware.jsnuxt.config.js同理增加

// middleware.js
const express = require('express');
const app = express();const {sequelize, ShortUrlModel} = require('../util/db');// sequelize连接数据库
sequelize.sync({force: true}).then(() => {console.log(`Data base created`)
})app.use(express.urlencoded({ extended: false }));app.post('/shortUrls', async (req, res) => {// 提交链接数据,并保存await ShortUrlModel.create(req.body);res.redirect('/');
})app.get('/:short', async (req, res) => {// 根据短链接码找到这条数据,数据里头有完整链接const shortUrl = await ShortUrlModel.findOne({where: {short: req.params.short}});// 得到完整链接后,进行重定向res.redirect(shortUrl.full)
})module.exports = app
// nuxt.config.js
serverMiddleware: [{ path: "/", handler: "~/server-middleware/middleware.js" }]

代表所有localhost:3000/都会转发到index.js,这个中间间里面;

接下来前端正常实现页面调用/shortUrls缩短链接,/:short短链接跳转到长链接了~

enjoy~

Nodejs 实现短网址功能相关推荐

  1. 行业内口碑好值得信赖的短网址,让你不再选择恐惧

    转眼一年又过去了,最近发现网络上有各种各样的短网址平台,让人眼花缭乱,都声称免费并且功能强大,但是据我的了解,很多免费的短网址都是有使用上的限制的,比如生成条数.访问次数.有广告等等.还有各种各样的复 ...

  2. t.cn短链接生成 - 新浪短网址生成器压缩网址详细教程

    t.cn短链接是新浪官方的短网址工具,提供在线将长链接缩短为最短形式的t.cn链接服务,生成的短网址跳转速度和访问兼容性没有任何影响,生成好的短网址永久有效,还可以通过对接调用api接口和批量生成的方 ...

  3. 短网址新星SUO.NZ改版上线了!

    一直以来,短网址领域不乏创新者.一直以来,随着营销水平的提高短网址不断的推陈出新,也越来越被广大的站长.营销人员所使用.suo.nz自上线以来不断受到用户的青睐,也就是如此,这次全新的改版,将赋予su ...

  4. 阿里云短信功能网址链接

    阿里云短信功能网址链接: https://dysms.console.aliyun.com/dysms.htm?spm=5176.doc59210.2.11.7XsCqe#/develop/api

  5. 开源作品:引流宝!集活码、短网址等功能为一体的工具!致力于提高引流效率,减少资源流失!

    前言 开发这款工具的初衷是为了辅助自己的工作,提供自己日常工作的效率,自己使用了一段时间下来觉得很有用,于是完善之后开源.如今已经开源近2年,第一个版本是在2020年9月份开源,收获了390个star ...

  6. 通过URLRewrite来实现短网址,短链接功能。

    最近在解决一下短网址,短链接问题. 开始,我们用的是新浪,或百度的短网址, 他们提供的短网址,短链接功能 ,能支持?xx=xx这样的链接. 但是,到了后面,居然不支持了.要求审核通过,才能支持. 等了 ...

  7. 最新短网址链接生成系统源码+短链防红功能

    正文: 前两年流行的新浪短网址和一些小站长搭建的短网址基本都没了,想要一个既稳定又好用的短网址系统只有自己搭建了,今天给大家分享一个很好用的短网址系统. 本系统是国内程序员开发,后台简洁,适合自用. ...

  8. [PHP]如何用PHP实现还原短网址的真实地址的功能

    常见的短网址都是通过 301 或 302 跳转的方式实现重定向到目标网站的,因此我们可以使用 PHP 的 curl_getinfo 来取得 header 中的重定向地址,也就是短网址对应的原始网址(嗯 ...

  9. 一个萝卜一个坑:短网址开发运维经验总结分享

    http://segmentfault.com/a/1190000000304859 每个萝卜下都隐藏一个坑. 前段时间955短网址日重定向次数最高达400万,主要开销是重定向请求的用户数据储存与分析 ...

最新文章

  1. burpsuite配置指南
  2. python 从深度相机realsense生成pcl点云
  3. 一次Oracle数据迁移
  4. Leetcode——两数之和
  5. centos7不中断执行命令
  6. 为什么要使用服务器信号切换器,为何要使用KVM切换器,其好处有哪些
  7. 浅析Microsoft .net PetShop程序中的购物车和订单处理模块(Profile技术,异步MSMQ消息)
  8. Literal Web 服务器控件
  9. 产品经理与交互设计师的对话——需求是如何变成产品原型的(转)
  10. C 语言 —— ! 和 ~(感叹号和波浪号)
  11. 【fabric实战指南二】Fabric v1.0 部署过程原理详解
  12. 扫荡波”来袭已造成大面积用户系统崩溃
  13. Android MTK修改手机型号
  14. 【粗解】【通信编码】卷积编码器的简单实现
  15. The scripts f2py, f2py3 and f2py3.8 are installed in ‘/home/cyd/.local/bin‘ which is not on PATH
  16. 走进JavaWeb技术世界7:Tomcat和其他WEB容器的区别
  17. Ubuntu 22.04 修改IP
  18. npm install 报node-sass错误
  19. Single TPR论文解读
  20. 多面体及欧拉公式及广义欧拉公式

热门文章

  1. (翻译)Fully Automated Deep Learning System for Bone Age Assessment
  2. 山洪灾害监测预警系统
  3. r语言 新增一列数字类型_R语言总结
  4. 软件人才外包驻场开发比软件项目外包的费用要高 原因在哪里
  5. Poj 3255(dijkstra求次短路)
  6. 基于汽车CAN总线专有协议OBD接口的调试方法及经验
  7. html转盘游戏,使用Javascript和CSS3实现一个转盘小游戏(实战篇)
  8. 炼铁工业如何解决工业废气?氨法脱硫有奇效
  9. 《电脑音乐制作实战指南:伴奏、录歌、MTV全攻略》——1.3 将下载的MIDI歌曲制作成MIDI音乐伴奏...
  10. R语言ggplot画世界地图并根据条件给国家上色