javascript - JS : Convert URL into its simplest form

标签 javascript

我正在构建一个 NodeJS 应用程序,可以将 URL 存储在数据库中。我想使用 URL 作为主键,以避免存储重复项。为了做到这一点,我需要 url 尽可能采用最简单的形式,删除多余的斜杠、参数和前缀。

如何将下面列出的所有 URL 转换为与列出的第一个 URL 相同的字符串?有没有一种方法可以安全地做到这一点,以解释我可能没有在下面列出的其他变化?

website.com/coolpage/938921

https://website.com/coolpage/938921/

https://www.website.com/coolpage/938921/

http://website.com/coolpage/938921/

https://website.com/coolpage/938921/

https://website.com/coolpage/938921/?awesome=1

https://website.com/coolpage/938921?awesome=1

https:///website.com//coolpage//938921//

最佳答案

使用标准 Node.js url模块。

解决方案:

require('url');

function getBaseUrl(url){
    const u = new URL(url);
    const result =`${u.host}${u.pathname}`
        .split('//').join('/')
        .replace('www.', '');

    // cut off the trailing '/' character from the result
    if (result.length && result[result.length - 1] === '/')
        return result.substring(0, result.length - 1)

    return result;
}

测试:

const urls = [
    "https://website.com/coolpage/938921/",
    "https://www.website.com/coolpage/938921/",
    "http://website.com/coolpage/938921/",
    "https://website.com/coolpage/938921/",
    "https://website.com/coolpage/938921/?awesome=1",
    "https://website.com/coolpage/938921?awesome=1",
    "https:///website.com//coolpage//938921//"
    ];

for (let i = 0; i < urls.length; i++) {
    const u = getBaseUrl(urls[i]);
    console.log(`${i}: ${u}`);
}

控制台输出:

0: website.com/coolpage/938921
1: website.com/coolpage/938921
2: website.com/coolpage/938921
3: website.com/coolpage/938921
4: website.com/coolpage/938921
5: website.com/coolpage/938921
6: website.com/coolpage/938921

Live example on runkit.com

关于javascript - JS : Convert URL into its simplest form,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54472715/

相关文章:

javascript - jQuery - 将变量传递给点击功能

javascript - 循环遍历单个 <td> 元素 - Laravel

javascript - JS深度优先遍历预序

javascript - 如何使用ajax进行等值类型比较返回json空数组

javascript - 在崩溃之前检测浏览器中的内存耗尽

javascript - 将复杂的 JavaScript 对象转换为点符号对象

javascript - 所需的 Node/表达模块未使用 chokidar 进行更新?

javascript - 停用切换按钮

javascript - 如何在 javascript 中打开文件流?

javascript - 获取 anchor 标签的动态值