我正在使用NodeJS。是否可以像在浏览器中那样在节点中要求javascript文件?因为当我使用require()方法时,它调用一个javascript文件,因为我无法访问我的server.js中的全局变量,所以它就像一个" use strict"我猜。我需要加载我的模块并使其成为主文件的延续,因为我的模块依赖于一些全局变量。
修改
我有这个server.js文件:
var Settings = require("settings.js");
var Clients = require("clients.js");
var removePack = [];
/**HERE RUNS MY WEBSOCKET SERVER**/
...
...
//When a new socket connects:
io.on("connection", function(socket){
var socket.id = Math.random();
var client = Clients.create(socket.id);
});
这是我的clients.js文件:
exports.create = function(){
self.team = Settings.generateRandomTeam(); /*The problem is here. I can´t access the Settings variable*/
self.maxSpeed = Settings.maxSpeed;
...
...
return self;
}
编辑2:
当我使用Settings = require(" settings.js")时,我收到以下错误:
TypeError:Settings.generateRandomTeam()不是函数。
我的settings.js文件是这样的:
Settings.generateRandomTeam = function(){
//Some code
}
module.exports = Settings;
谢谢!
答案 0 :(得分:1)
要从Settings
文件访问clients.js
对象,只需将其添加到clients.js
文件中:
const Settings = require("settings.js");
exports.create = function(){
self.team = Settings.generateRandomTeam(); /*The problem is here. I can´t access the Settings variable*/
self.maxSpeed = Settings.maxSpeed;
...
...
return self;
}
node.js中的模块被缓存,因此解析为完全相同的文件路径的两个require()
语句将返回完全相同的缓存模块。因此,由于缓存,每次调用Settings
时,实际上都会得到相同的require("settings.js")
对象。
这是在node.js中共享的关键。你不会考虑加载一次,然后尝试在任何地方分享。相反,您考虑将每个模块require()
置于其需要的范围内(如果可能)。这可以提高模块的独立性和可重用性,因为它们往往更加独立,而不是依赖于已经为它们构建的某些全球环境。
当然,还有其他方法可以通过将数据推送到模块构造函数中的模块来共享数据,或者通过在加载模块时向其他模块调用模块以从中检索数据来拉取数据。在某些情况下,当需要为模块提供特定的某些实例(如数据库句柄)时,这可能是必要的。