【发布时间】:2021-08-06 08:58:03
【问题描述】:
我正在构建一个 URL Shortener,我决定尽可能回收短 ID 以节省数据库空间。如何检查 2 个 URL 是否指向同一路径?
例如,假设用户为https://google.com/ 生成了一个短网址。
我的应用生成以下短 id:jkU3
因此,如果此用户访问https://tiny.url/jkU3,我的快速服务器会将访问者重定向到https://google.com/。
这就像一个魅力,但知道让我们假设另一个人访问 https://tiny.url/ 并为 https://google.com 生成一个短 URL。另一个来为https://www.google.com/ 生成一个短URL,另一个来为https://www.google.com 生成一个短URL。你明白了..
到目前为止,我的应用会浪费 4 个短 ID。
如何防止这种情况发生?这个有正则表达式吗?
这是我用于生成短 URL 的当前代码:
app.post("/", (req: Request, res: Response) => {
const shortUrl: string = nanoid(4);
const destination: string = req.body.destination;
UrlSchema.create({
_id: mongoose.Types.ObjectId(),
origin: shortUrl,
destination: destination,
}).then(() => {
// Unique Id
res.json(shortUrl);
});
});
【问题讨论】:
-
虽然在 google 的情况下这似乎是对短 ID 的浪费,但请注意有些网站可以使用
www,而有些网站可以不使用。有些网站使用最后一个/,但有些网站没有,并且如果系统管理员不能很好地完成这项工作,他们可能会忘记对有和没有/的页面进行正确的重定向。在某些情况下,网页可能与 http/https 一起使用,而您不能只使用一种协议。所以总而言之,除了将所有 url 设置为相同的大写或小写之外,我不建议您对它们进行任何更改。因为没有保证 -
而且通常情况下,用户会将长网址复制/粘贴到您的小网址,而不是手动输入它们。因此,相同 url 出现不同变化的可能性非常小,除非您创建脚本来获取这些 url,并检查 302 重定向并获取最终 url。
标签: node.js regex mongodb express mongoose