Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何根据环境定制Node.js中的公共js文件?_Javascript_Node.js_Express - Fatal编程技术网

Javascript 如何根据环境定制Node.js中的公共js文件?

Javascript 如何根据环境定制Node.js中的公共js文件?,javascript,node.js,express,Javascript,Node.js,Express,我正试图根据环境定制公共javascript文件。具体来说,对于socket.io,我正在尝试自定义客户端将连接到的位置: 发展: var socket = io.connect('http://localhost/chat'); 制作: var socket = io.connect('http://xxx.xxx.xxx.xxx/chat'); 我知道应用程序本身中的所有环境变量(我通过express使用节点环境变量),但从我所知道的情况来看,这些变量不会影响我为客户端提供的公共静态js

我正试图根据环境定制公共javascript文件。具体来说,对于socket.io,我正在尝试自定义客户端将连接到的位置:

发展:

var socket = io.connect('http://localhost/chat');
制作:

var socket = io.connect('http://xxx.xxx.xxx.xxx/chat');
我知道应用程序本身中的所有环境变量(我通过express使用节点环境变量),但从我所知道的情况来看,这些变量不会影响我为客户端提供的公共静态js文件


基于开发/生产环境实现这种上下文切换的最佳方式是什么?

如果您编写的是不引人注目的JavaScript并使用适当的捆绑系统,那么您交付的每个HTML页面应该只引用一个“加载程序”脚本,然后负责引入所有其他脚本。创建该脚本的两个版本,一个用于开发,一个用于生产,并为它们指定不同的名称。呈现HTML时,将脚本的名称设置为模板变量,该变量将根据您的环境进行设置。然后,您的加载程序脚本可以设置适当的变量,以供它引入的脚本使用。

就像我在布局页面中加载socket.io那样:

<script src='<%= socketIoUrl %>/socket.io/socket.io.js'></script>

<script type="text/javascript">
    var socket = io.connect('<%= socketIoUrl %>');
</script>
因此,在我的server.js文件中,我根据环境设置了适当的值,并加载了helper文件:

app.configure('development', function(){
    app.set('socketIoUrl', 'http://localhost:3003');
});

app.configure('test', function(){
    app.set('socketIoUrl', 'http://...');
});

app.configure('production', function(){
    app.set('socketIoUrl', 'http://...');
});

require('./apps/helpers')(app);

因此,现在您可以在任何其他js文件中使用布局页面中创建的
socket
变量。

您是否尝试过:
var socket=io.connect(document.location.href)
?@Aust-这是一个有趣的想法,但问题是文档的url与socket.io尝试连接的url不相同。因此,我可以在几个不同的页面中的一个页面上,但所有页面都应该连接到相同的socket.io位置。还有其他想法吗?
app.configure('development', function(){
    app.set('socketIoUrl', 'http://localhost:3003');
});

app.configure('test', function(){
    app.set('socketIoUrl', 'http://...');
});

app.configure('production', function(){
    app.set('socketIoUrl', 'http://...');
});

require('./apps/helpers')(app);