【问题标题】:Make Base URL at Frontend using Javascript (development, APIs and production)使用 Javascript 在前端创建基本 URL(开发、API 和生产)
【发布时间】:2021-08-12 12:45:45
【问题描述】:

无论开发和部署如何,如何制作与 http、https、localhost、端口和实际域一起使用的基本 url?

【问题讨论】:

    标签: javascript reactjs angular vue.js url


    【解决方案1】:

    我想制作一个在所有场景或条件下都可以使用的基本 url,无论它是在开发中还是在部署/生产中,无论 http/https 协议、端口、本地主机和实际域如何。

    所以,我想出了这个基本的东西来处理本地服务并使用简单的 javascript 构建生产环境。

    基础知识

    var getUrl = window.location;
    var baseUrl = getUrl.protocol + "//" + getUrl.host;
    

    此基本 url 将在运行时计算并决定实际协议和实际主机名。

    进阶

    如果你想为不同微服务的不同端口更改API调用的端口,也可以使用该功能

    function changePortForAPI(baseUrl, port) {
        var host = baseUrl.split("//");
        var res = host[1].split(":");
        res[1] = port;
        var result = host[0]+"//"+res[0] +":"+ res[1];
        return result;
    }
    

    注意:这个 'changePortForAPI(baseUrl, port)' 用于开发目的,因为在构建时没有使用端口进行 API 调用,因为它将由 Apache 和 Nginx 等服务器处理。

    所以,要检测 localhost/development 部分并使用不同的端口进行 API 调用,您可以使用

    function inDevelopment(baseUrl){
        var index = baseUrl.indexOf("localhost");
        if(index > 0){
          return true;  
        }
        else{
          return false;
        }
    }
    

    检测到开发模式后,您可以使用“changePortForAPI”函数进行 API 调用,在开发和部署时也可以正常运行。

    已编辑:

    function inDevelopment(baseUrl){
        var host = baseUrl.split("//");
        var index = host[1].indexOf(":");
        if(index > 0){
          return true;  
        }
        else{
          return false;
        }
    }
    

    当您考虑提交更改并且您正在使用与其他开发人员分开的网络 ip 时,此编辑功能很好。

    【讨论】:

    • 自我回答很好,但在实际场景中并不总是适用于坚持 window.location。它可能不是 localhost 而是其他东西,例如在主机中指定的自定义域或本地网络 IP。在环境变量中明确指定基本 url 更有意义,这是由特定于框架的工具支持的,因为这是必须的。 开发目的,因为在构建时没有使用端口进行 API 调用,因为它将由 Apache 和 Nginx 等服务器处理 - 将 API 端点映射到另一个端口上的服务器可以由代理服务器处理,由 Vue CLI 等提供。
    • 但我认为 window.location 在获取协议和主机方面非常适合实际场景,因为它还可以捕获网络上的指定主机或本地 IP。出于开发目的,用户可以将此行 var index = baseUrl.indexOf("localhost"); 更改为 var index = baseUrl.indexOf("127.0.0.1");var index = baseUrl.indexOf("192.168.34.3"); 以检测 inDevelopment 模式。因为它只是 JavaScript,与前端框架无关。因为每个都有单独的方法,但是这种简单的方法可以在不考虑框架和域服务器的情况下工作。
    • JS 与框架无关,但应用程序有,它们与特定设置相关联。 出于开发目的,用户可以更改此行 - 然后您会得到本地修改过的文件,该文件不应该被意外提交。我多次遇到这个问题,所以我从自己的经验中知道。
    • 是的,我知道 JS 与框架无关,这就是我提到“无论框架如何”的原因。但是感谢我们不能提交这件事。由于本地IP等。但我对此有一个hack并且已经过测试。函数 inDevelopment(baseUrl){ var host = baseUrl.split("//"); var index = host[1].indexOf(":");如果(索引 > 0){ 返回真; } 其他{ 返回​​错误; } } 我要在 awnser 中添加这个
    猜你喜欢
    • 1970-01-01
    • 2011-02-27
    • 2011-09-02
    • 2023-04-11
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 2022-01-25
    相关资源
    最近更新 更多