在客户端javascript中,如何根据环境更改我的变量?

时间:2014-03-07 21:14:49

标签: javascript node.js

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

我一直在本地工作,直到最近,我有点沮丧,我每次只是为了部署而改变我的代码。

具体来说我使用套接字io,我需要告诉套接字它所在的位置:

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

当我去本地时,这很棒,但每次部署到我的测试服务器时我都需要更改它...这很烦人。在其他语言中,我可以通过配置文件来完成此操作。

在节点中,在服务器端,我可以根据我的环境设置变量,如此...

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

我可以在客户端做类似的事吗?

5 个答案:

答案 0 :(得分:1)

您必须以某种方式将此变量嵌入客户端HTML代码(即在Jade模板中)。

如果您显示提供HTML的服务器端代码,我可能会确定它可能位于何处。

答案 1 :(得分:1)

我经常做这样的事情:

(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);
})();

答案 2 :(得分:1)

如果您使用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);

答案 3 :(得分:0)

这取决于您在节点方面的管理方式。就像你有每个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'
        }
});

答案 4 :(得分:-1)

在客户端,这应该足够了:

var _socket = io.connect();

socket.io将自动检测主机和端口。

修改

如果网址与地址和端口匹配,您也可以执行以下操作:

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