我一直在使用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');
但同样的错误。
如果在加载"扩展程序时出现问题"从远程服务器到我的代码,或者我只是格式化"要求"打电话错了?
非常感谢!
尤瓦。
P.S。 这是这个帖子的后续内容: This is the older and resolved post
答案 0 :(得分:8)
具体来说,请参阅the require algorithm
在node.js中,require
调用是同步的,因此无法加载不在文件系统上的文件(即来自外部URL)。
您可以通过http request获取代码 - 或者更好的是https request并使用内置的vm模块运行代码 - 甚至可以使用eval
运行代码,但这似乎不是一个好主意 - 正如this old question所建议的那样。
像
这样的东西https.get( 'https://www.xxxxx.com/blabla/forza4.js', function( res ){
res.on( 'data', function( data ){
vm.runInThisContext( data, 'remote/forza4.js' );
});
});
注意:我没有测试此代码
当然,这不是最好的解决方案,但它是一种解决方案。
答案 1 :(得分:0)
“从URL要求” NPM软件包怎么样?
刚刚找到它-尚未尝试! https://www.npmjs.com/package/require-from-url