好的,所以我使用的是node.js,非常棒。
我一直在本地工作,直到最近,我有点沮丧,我每次只是为了部署而改变我的代码。
具体来说我使用套接字io,我需要告诉套接字它所在的位置:
var _socket = io.connect('http://localhost:5000');
当我去本地时,这很棒,但每次部署到我的测试服务器时我都需要更改它...这很烦人。在其他语言中,我可以通过配置文件来完成此操作。
在节点中,在服务器端,我可以根据我的环境设置变量,如此...
app.configure('development', function(){
process.env.PORT = 5000;
});
我可以在客户端做类似的事吗?
答案 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=test
或grunt --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);