使用带有node.js的require加载远程js文件

时间:2014-05-09 13:49:43

标签: javascript node.js

我一直在使用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

2 个答案:

答案 0 :(得分:8)

查看node.js modules docs

具体来说,请参阅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