前言

之前写了个东西,需要使用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、部署

lean deploy

6、登录网页绑定域名,北美的可以使用cloudflare加速
注意:现在cloudflare国内的可能不稳定,还是推荐使用国内的DNS解析

演示地址

https://short.landandan.cn/