1

我有一个主要基于 JavaScript 的网站。它使用 REST 服务。我在 JavaScript 页面中硬编码了 REST 服务 URL。URL 将从 PROD 更改为 testing。每次我将此站点部署到不同的环境时,我都需要去更新 .JS 文件。管理这些的最佳方法是什么?有更好的方法吗?

4

3 回答 3

2

可以获取加载 JS 的当前页面的 URL location.href。使用它和一些字符串操作,您可以动态创建这些 RESTful URL。

于 2012-07-06T14:53:06.483 回答
1

我通常将这些地址和其他部署敏感值隔离到一个单独的脚本块中,该脚本块由服务器在运行时生成。

示例:(此处为 ASP.NET MVC,但可以是任何语言/框架)

<script type="text/javascript">
    var pageOptions =
    {
        "detailsDataUrl": '@Url.Action("LoadDetail", "Contact")',
        "applicationBase": '@Url.Content("~")'
    };
</script>

您可以交替使用仅具有此类数据的一个文件的多个版本,并且部署过程的一部分是部署环境的版本。

更新:K. Scott Allen 发表了一篇非常好的文章,介绍了将数据从服务器代码传递到 javascript 代码的不同选项,这只是其中的一个示例。你可以在这里阅读。他特别提到了一个名为NGON的库,它形式化了上述模式并添加了一些方便的花里胡哨。我已将它添加到几个项目中,并发现它非常有用。

于 2012-07-06T14:52:28.670 回答
1

每个人的做法都有所不同,但通常这是使用构建系统完成的。在构建期间,执行构建的服务器上有一个环境变量,其值类似于“prod”或“qa”或“dev”。构建 Web 应用程序组件时,一个步骤涉及将您放入文件中的标记替换为适合环境的值。

请注意,如果您对 restful 端点使用相对路径,则不需要这样做。只有在需要更改主机/协议/端口信息时才需要这样做。这太糟糕了。可能更好地了解您正在测试哪个环境并使用 /etc/hosts 将标准 url 映射到特定于环境的 URL。例如,如果您的应用使用

www.myapp.com

您可以设置一个将该 url 映射到qa.myapp.com:80. 您将使用脚本来管理更改主机文件以适应您想要的任何环境。

于 2012-07-06T14:54:53.227 回答