如何更改 javascript [客户端] 中不同阶段的端点?
How to change endpoints for different stages in javascript [client side]?
我想之前可能有人问过。但我无法根据我的搜索关键字找到任何结果。
在我的用例中,我根据阶段信息 [桌面、预生产、生产] 配置端点。我在后端使用 golang。在后端,我使用 APP_STAGE 环境变量来读取相应的配置。例如,
fileName = APP_STAGE + "-endpoints.cfg"
并且我在启动服务器之前导出变量。
$export APP_STAGE="desktop"
桌面-endpoints.cfg看起来像这样,
{
"featured" : {
"httpendpoint": {
"url": "http://localhost:8081/api/services/featured/"
}
},
"latest" : {
"httpendpoint": {
"url": "http://localhost:8081/api/services/latest/"
}
}
}
但是我怎样才能在客户端实现这个 [javascript]?我有以下结构的文件,
app/
view.js
featured.js
home.js
每个文件使用不同的端点进行 ajax 调用。如何根据 javascript 中的某些变量 [if not env variable] 读取阶段配置?
有人可以帮我解决这个问题吗?我是 javascript.
的新手
谢谢。
JavaScript 文件由浏览器在客户端执行。浏览器无法访问服务器配置文件,因此服务器有责任 read/get 正确的配置值并使它们对客户端可用。
有多种方法可以解决这个问题。我将概述一些可能的解决方案。
1。在 HTML 文件
中包含正确的端点
您可以选择在 HTML 文件中包含正确的端点,这些文件引用将在其中使用它们的 javascript 文件。
HTML 文件是模板而不是静态文件,您可以使用 html/template
包来执行这些模板以包含必要的 URL 和您需要的所有其他内容,并生成最终文件HTML 将发送给客户。
HTML 模板可能包含一个 <script>
标签初始化某些 JavaScript 变量,然后可以从包含的 JavaScript 文件中使用。
这是一个传递精选 httpendpoint
.
的简单示例
HTML 模板 ("home.html"
):
<html>
<head>
<script>
var featuredHttpEndpoint = "{{.FeaturedHttpEndpoint}}";
</script>
<script src="view.js"></script>
<script src="featured.js"></script>
<script src="home.js"></script>
</head>
<body>Your body</body>
</html>
以及将为该 HTML 模板提供服务的处理程序:
var homeTempl = template.Must(template.New("").ParseFiles("home.html"))
func homeHandler(w http.ResponseWriter, r *http.Request) {
m := map[string]interface{}{
// Insert the value of endpoint from your config
"FeaturedHttpEndpoint": "http://localhost:8081/api/services/featured/",
}
if err := homeTempl.Execute(w, m); err != nil {
// Handle error
}
}
映射主处理程序,例如:
http.HandleFunc("/index.html", homeHandler)
并确保主页未被缓存,这样浏览器将始终请求一个新的副本,您的服务器可以在其中插入实际的配置值。
2。从 JavaScript 个文件
执行 AJAX 请求
您可以选择从 JavaScript 文件执行 AJAX 请求以查询必要的信息。可以在这个问题中找到一个简单的例子:Dynamically refresh a part of the template when a variable is updated golang
在现实生活中的例子中,您将通过一个请求传输客户端需要的所有配置值(例如 JSON 格式),这里我只传输一个值。
仅获取/发送特色httpendpoint
:
在JavaScript中:
var featuredHttpEndpoint = "";
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var config = JSON.parse(xhr.responseText);
featuredHttpEndpoint = config.FeaturedHttpEndpoint;
}
}
xhr.open("GET", "/config.json", true);
try {
xhr.send();
} catch (err) {
// handle error
}
Go 处理程序提供配置值:
func configHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
m := map[string]interface{}{
// Insert the value of endpoint from your config
"FeaturedHttpEndpoint": "http://localhost:8081/api/services/featured/",
}
if err := json.NewEncoder(w).Encode(m); err != nil {
// Handle error
}
}
必须映射到客户端调用的路径,例如:
http.HandleFunc("/config.json", configHandler)
3。使用 Javascript 个文件作为模板
您还可以选择制作 Javascript 文件模板,并且在提供它们时,您可以使用模板引擎根据您的环境/APP_STAGE
包含端点。请参阅第 1 点作为服务模板的示例。
如果你沿着这条路走下去,你必须注意正确配置 Javascript 文件的缓存,因为浏览器不会再次要求你提供 js 文件,如果他们的缓存信息表明他们没有过期。
我想之前可能有人问过。但我无法根据我的搜索关键字找到任何结果。
在我的用例中,我根据阶段信息 [桌面、预生产、生产] 配置端点。我在后端使用 golang。在后端,我使用 APP_STAGE 环境变量来读取相应的配置。例如,
fileName = APP_STAGE + "-endpoints.cfg"
并且我在启动服务器之前导出变量。
$export APP_STAGE="desktop"
桌面-endpoints.cfg看起来像这样,
{
"featured" : {
"httpendpoint": {
"url": "http://localhost:8081/api/services/featured/"
}
},
"latest" : {
"httpendpoint": {
"url": "http://localhost:8081/api/services/latest/"
}
}
}
但是我怎样才能在客户端实现这个 [javascript]?我有以下结构的文件,
app/
view.js
featured.js
home.js
每个文件使用不同的端点进行 ajax 调用。如何根据 javascript 中的某些变量 [if not env variable] 读取阶段配置?
有人可以帮我解决这个问题吗?我是 javascript.
的新手谢谢。
JavaScript 文件由浏览器在客户端执行。浏览器无法访问服务器配置文件,因此服务器有责任 read/get 正确的配置值并使它们对客户端可用。 有多种方法可以解决这个问题。我将概述一些可能的解决方案。
1。在 HTML 文件
中包含正确的端点您可以选择在 HTML 文件中包含正确的端点,这些文件引用将在其中使用它们的 javascript 文件。
HTML 文件是模板而不是静态文件,您可以使用 html/template
包来执行这些模板以包含必要的 URL 和您需要的所有其他内容,并生成最终文件HTML 将发送给客户。
HTML 模板可能包含一个 <script>
标签初始化某些 JavaScript 变量,然后可以从包含的 JavaScript 文件中使用。
这是一个传递精选 httpendpoint
.
HTML 模板 ("home.html"
):
<html>
<head>
<script>
var featuredHttpEndpoint = "{{.FeaturedHttpEndpoint}}";
</script>
<script src="view.js"></script>
<script src="featured.js"></script>
<script src="home.js"></script>
</head>
<body>Your body</body>
</html>
以及将为该 HTML 模板提供服务的处理程序:
var homeTempl = template.Must(template.New("").ParseFiles("home.html"))
func homeHandler(w http.ResponseWriter, r *http.Request) {
m := map[string]interface{}{
// Insert the value of endpoint from your config
"FeaturedHttpEndpoint": "http://localhost:8081/api/services/featured/",
}
if err := homeTempl.Execute(w, m); err != nil {
// Handle error
}
}
映射主处理程序,例如:
http.HandleFunc("/index.html", homeHandler)
并确保主页未被缓存,这样浏览器将始终请求一个新的副本,您的服务器可以在其中插入实际的配置值。
2。从 JavaScript 个文件
执行 AJAX 请求您可以选择从 JavaScript 文件执行 AJAX 请求以查询必要的信息。可以在这个问题中找到一个简单的例子:Dynamically refresh a part of the template when a variable is updated golang
在现实生活中的例子中,您将通过一个请求传输客户端需要的所有配置值(例如 JSON 格式),这里我只传输一个值。
仅获取/发送特色httpendpoint
:
在JavaScript中:
var featuredHttpEndpoint = "";
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var config = JSON.parse(xhr.responseText);
featuredHttpEndpoint = config.FeaturedHttpEndpoint;
}
}
xhr.open("GET", "/config.json", true);
try {
xhr.send();
} catch (err) {
// handle error
}
Go 处理程序提供配置值:
func configHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
m := map[string]interface{}{
// Insert the value of endpoint from your config
"FeaturedHttpEndpoint": "http://localhost:8081/api/services/featured/",
}
if err := json.NewEncoder(w).Encode(m); err != nil {
// Handle error
}
}
必须映射到客户端调用的路径,例如:
http.HandleFunc("/config.json", configHandler)
3。使用 Javascript 个文件作为模板
您还可以选择制作 Javascript 文件模板,并且在提供它们时,您可以使用模板引擎根据您的环境/APP_STAGE
包含端点。请参阅第 1 点作为服务模板的示例。
如果你沿着这条路走下去,你必须注意正确配置 Javascript 文件的缓存,因为浏览器不会再次要求你提供 js 文件,如果他们的缓存信息表明他们没有过期。