我一直在使用NodeJS和javascript开发在线套接字服务器,并且一直在使用require在代码中创建“游戏室”:
new_game_obj = require('./forza4.js');
现在,当我在本地计算机上测试我的代码时,这种方法就可以找到,但是对于生产服务器,我遇到了一个问题。似乎出于某种技术原因,运行我的代码的过程与我可以访问的(用于文件上载等)机器不在同一台机器上,因此服务器场中的家伙要求我更改我的机器。代码,这样我就可以从全局位置而不是本地加载“ forza4.js”中的代码,就像我现在所做的那样。所以我将代码更改为此:
new_game_obj = require('http://www.xxxxx.com/blabla/forza4.js');
(当然,我进行了测试以查看文件是否存在,只是为了确保当我指向该实际地址时该文件显示在浏览器中)但是我从代码中得到了一个错误(再次,我正在运行这在我的机器上本地显示),其中显示:
异常:错误:找不到模块' http://www.xxxxx.com/blabla/forza4.js '
因此,为了安全起见,我这样做了:
new_game_obj = require('http://92.xx.xx.xx/blabla/forza4.js');
但是同样,同样的错误。
从远程服务器将“扩展名”加载到我的代码中是否应该出现问题,还是我将“ require”调用的格式设置为错误?
谢谢一堆!
尤瓦尔
PS:这是此主题的后续文章:这是较旧且已解决的帖子
具体来说,请参阅require算法
在node.js中,require
调用是同步的,因此无法加载不在文件系统上的文件(即,从外部URL)。
您可以通过http请求(甚至更好的是https请求)获取代码,然后使用内置的vm模块运行该代码,甚至可以使用vm模块运行该代码eval
,但这似乎不是一个好主意,就像这个老问题所建议的那样。
就像是
https.get( 'https://www.xxxxx.com/blabla/forza4.js', function( res ){
res.on( 'data', function( data ){
vm.runInThisContext( data, 'remote/forza4.js' );
});
});
注意:我没有测试此代码
当然,这不是最好的解决方案,但它是一个解决方案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句