我一直在使用 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”调用错误?
非常感谢!
Yuval.
附:
这是该线程的后续内容:这是较旧且已解决的帖子
看一下node.js模块文档
具体可以参考要求的算法
在 Node.js 中,require
调用是同步的,因此无法加载不在您的文件系统上的文件(即从外部 URL)。
Update
您可以通过获取代码http请求- 或者,更好的是,一个https 请求并使用内置运行它vm模块 - 甚至与eval
,但这似乎不是一个好主意 - 正如建议的那样这个老问题.
就像是
https.get( 'https://www.xxxxx.com/blabla/forza4.js', function( res ){
res.on( 'data', function( data ){
vm.runInThisContext( data, 'remote/forza4.js' );
});
});
Note: 我没有测试这段代码
当然,这不是最好的解决方案,但确实是一个解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)