控制JavaScript中的设置

控制JavaScript中的设置,javascript,rest,configuration,web-config,Javascript,Rest,Configuration,Web Config,我有一个主要基于JavaScript的网站。它使用REST服务。我在JavaScript页面中硬编码了REST服务URL。URL将从PROD更改为testing。每次我将这个站点部署到不同的环境时,我都需要去更新.JS文件。管理这些问题的最佳方法是什么?有更好的方法吗?我通常将这些地址和其他部署敏感值分离到一个单独的脚本块中,该脚本块由服务器在运行时生成 示例:(此处为ASP.NET MVC,但可以是任何语言/框架) 变量页面选项= { “detailsDataUrl”:“@Url.Actio

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

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

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


变量页面选项=
{
“detailsDataUrl”:“@Url.Action(“LoadDetail”、“Contact”),
“applicationBase”:“@Url.Content(~”)
};
您可以选择一个文件的多个版本,其中只包含此类数据,部署过程的一部分是部署环境的版本


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

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

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


变量页面选项=
{
“detailsDataUrl”:“@Url.Action(“LoadDetail”、“Contact”),
“applicationBase”:“@Url.Content(~”)
};
您可以选择一个文件的多个版本,其中只包含此类数据,部署过程的一部分是部署环境的版本


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

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

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

每个人的做法都有点不同,但这通常是通过构建系统完成的。在构建过程中,在进行构建的服务器上有一个环境变量,其值类似于“prod”或“qa”或“dev”。构建web应用程序组件时,其中一个步骤是将放入文件中的令牌替换为适合环境的值

注意:如果为restful端点使用相对路径,则不需要这样做。只有在需要更改主机/协议/端口信息时,才需要执行此操作。真糟糕。最好知道您正在测试哪些环境,并使用/etc/hosts将标准URL映射到特定于环境的URL。例如,如果您的应用程序使用

www.myapp.com


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

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

注意:如果为restful端点使用相对路径,则不需要这样做。只有在需要更改主机/协议/端口信息时,才需要执行此操作。真糟糕。最好了解您正在测试的环境,并使用/etc/hosts将标准URL映射到特定于环境的URL。例如,如果应用程序使用

www.myapp.com

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

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