javascript - 使用 require 和 node.js 加载远程 js 文件

标签 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');

(当然,我测试过文件是否存在,只是为了确定,当我指向那个实际地址时,它会显示在浏览器中) 但是我从我的代码中得到一个错误(同样,此时,我在我的机器上本地运行它),它说:

Exception: Error: Cannot find module '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

最佳答案

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

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

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

关于javascript - 使用 require 和 node.js 加载远程 js 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23566310/

相关文章:

javascript - 如果条件在 JAVASCRIPT 中不起作用

javascript - 在 Typescript 对象类中保留原始属性

javascript - jQuery 文件上传不会在 IE9 中发送文件

javascript - 如何忽略 node.js 中另一个文件或组件所需的文件

node.js - 将坐标保存到 Mongoose 中

node.js - facebook-pasport 的回调可以动态构造吗?

javascript - 什么是 HTMLDocument 的 Proptype

javascript - iOS 中的等价于 Android 中的 Javascript 接口(interface)?

mysql - Sequelize upsert 总是在发布请求时创建/插入一个新条目,而不是更新匹配用户名的数据。 MySQL数据库

node.js - Node 应用程序获取 "Error: EACCES: permission denied, mkdir ' .tmp'