簡體   English   中英

在客戶端javascript中,如何根據環境更改我的變量?

[英]In client side javascript, how can change my variables based on environment?

好的,所以我使用的是node.js,非常棒。

我一直在本地工作,直到最近,我有點沮喪,我每次只是為了部署而改變我的代碼。

具體來說我使用套接字io,我需要告訴套接字它所在的位置:

var _socket = io.connect('http://localhost:5000');

當我去本地時,這很好,但每次我部署到我的測試服務器時我都需要更改它...這很煩人。 在其他語言中,我可以通過配置文件來完成此操作。

在節點中,在服務器端,我可以根據我的環境設置變量,如此...

app.configure('development', function(){
    process.env.PORT = 5000;
});

我可以在客戶端做類似的事情嗎?

您必須以某種方式將此變量嵌入到客戶端HTML代碼中(即在Jade模板中)。

如果您顯示服務器端代碼提供HTML,我可能能夠確定它可能位於何處。

我經常做這樣的事情:

(function(){
var config = {
    host: 'localhost',
    port: '8080',
    setEnv: function(env){
        switch (env){
            case 'development':
                this.host = 'devserver';
                this.port = '80';
                break;
            case 'production':
                this.host = 'prodserver';
                this.port = '80';
                break;
        }
    }
};

   console.log(config.host);
   console.log(config.port);
   config.setEnv('production');

   console.log(config.host);
  console.log(config.port);
})();

如果使用grunt構建應用程序,請使用grunt-variablize 將您的配置放入resources/config.json

{
  "test": {
    "socketUrl": "http://localhost:5000"
  },
  "prod": {
    "socketUrl": "http://your-production.com:5000"
  }
}

配置變量任務:

grunt.initConfig({
  /* ... */
  variablize: {
    target: {
      input: "resources/config.json",
      output: "dist/config.js",
      variable: "Config",
      property: grunt.option('profile')
    }
  }
});

運行grunt --profile=testgrunt --profile=prod並以這種方式使用它:

var _socket = io.connect(Config.socketUrl);

這取決於您在節點方面的管理方式。 就像你有每個env不同的配置文件。 例如。 production.js,development.js等。然后你可以在該配置中定義url或設置一個env。 設置此基本URL或環境。 進入服務器端的HTML模板並進行渲染。 在客戶端,您可以輕松閱讀環境。 或基本網址。 在我的情況下,我根據環境設置了網址。 我在配置文件中定義了環境,並在客戶端創建了配置文件。 所以那基於env。 配置文件可以設置URL。

    angular.module('core').constant('config',{
    'apiUrl' :{
            'beta': 'http://api-beta.xyzdev.com',
            'dev': 'http://api-dev.xyzdev.com',
            'production': 'http://api-prod.xyzdev.com'
        }
});

在客戶端,這應該足夠了:

var _socket = io.connect();

socket.io將自動檢測主機和端口。

編輯

如果網址與地址和端口匹配,您還可以執行以下操作:

var _socket = io.connect(document.location.protocol+'//'+document.location.host);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM