【问题标题】:Loading remote js file using require with node.js使用 node.js 加载远程 js 文件
【发布时间】:2014-06-27 07:03:09
【问题描述】:

我一直在使用 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”调用错误?

非常感谢!

尤瓦尔。

附: 这是对这个线程的跟进: This is the older and resolved post

【问题讨论】:

  • 只是为了澄清,您使用的是requirejs.org吗?
  • 不,我使用的是 Nodejs,并且在代码中我使用的是“require”操作。
  • 好的,现在给你写答案

标签: javascript node.js


【解决方案1】:

看看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' );
  });
});

注意:我没有测试这段代码

当然这不是最好的解决方案,但确实是一个解决方案。

【讨论】:

  • 好的,我可以接受,这很有意义,但它让我陷入困境,这意味着如果我需要我的主代码调用来自不同来源的代码,我将拥有将我的外部文件放在运行主代码的同一文件系统中......我的问题从服务器场开始,我们的生产服务器被俘虏他们说他们不能在我们的生产机器上运行 nodejs 代码,所以他们采取我的代码并将其作为进程在与我们的服务器位于同一本地组的另一台 Linux 机器上运行,并且我的套接字连接请求正在重新路由到另一台机器......
  • @Yuval 我用一些可以帮助您解决此问题的信息更新了我的答案。
  • 请仔细阅读答案并注意我没有测试该代码,这只是一个例子来说明文字。如果不知道您想做什么,我无法帮助您,请考虑添加一个新问题,我会看看它。
【解决方案2】:

'require from URL' NPM 包怎么样?

刚刚找到 - 还没试过! https://www.npmjs.com/package/require-from-url

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多