前言
之前写了个东西,需要使用url来传参,导致链接特别长,不利于分享。找了一些免费的短网址服务,不好用。受Valine启发,做了这个,感觉非常适合github pages使用。
原理
1、使用uuid跟长网址一一对应存数据库
注:因为自己玩数据少,就直接使用uuid了
实现
1、在 leanCloud 网站上创建一个 leanCloud 应用(如果需要绑定域名且没有备案过请选择北美)
2、本地创建项目,关联项目
// 登录账户并选择区域 lean login
// 创建项目并关联 lean init xxx
// 选择自己熟悉的语言环境
|
3、添加接口服务(以下为 node 代码)
router.get('/:id', async (ctx, next) => { let id = ctx.request.url.replace('/', ''); if (!_.isEmpty(id)) { const query = new LC.Query('shortUrl'); query.equalTo('uuid', id); const res = await query.find(); if (res && res.length > 0) { const redirectUrl = _.get(res, '0.attributes.url', ''); ctx.status = 302; // 301也可以,根据实际情况调整 ctx.redirect(redirectUrl); ctx.body = ''; } } });
|
4、添加转换页面
// 只贴核心代码
const uuid = shortUUID().new();
const LCShortUrl = LC.Object.extend('shortUrl'); const lcShortUrl = new LCShortUrl(); lcShortUrl.set('uuid', uuid); lcShortUrl.set('url', this.originUrl);
let getAcl = () => { let acl = new LC.ACL(); acl.setPublicReadAccess(!0); acl.setPublicWriteAccess(!1); return acl; };
lcShortUrl.setACL(getAcl());
lcShortUrl.save().then((res) => { this.newUrl = 'https://xxx.xx/' + _.get(res, 'attributes.uuid', ''); });
|
5、部署
6、登录网页绑定域名,北美的可以使用cloudflare加速
注意:现在cloudflare国内的可能不稳定,还是推荐使用国内的DNS解析
演示地址
https://short.landandan.cn/