我有一个相当具体的问题:
我有一个变量(一个特定的构造文件名),我需要从一个文件中的API中获取该变量作为变量存储在另一个文件中。我的代码设置的方式,没有一种方法(我能想到)将这个变量从一个文件转换到另一个文件而不使用全局变量。我一直在寻找一些不同的方法,并决定创建一个全局模块。
这是我的全局模块(globals.js)中的代码:
var globals = {
'new_img': ''
}
module.exports = globals;
我写过:
var globals = require('./public/js/globals');
在我的server.js和我的routes.js中,这样我的所有API和控制器都可以访问这个模块。
现在,我的实际问题是: 当我提供此Web应用程序并且多个人拥有自己的网页实例时,他们是否都使用相同的全局模块?这不是我想要的效果,所以我想知道是否有其他人有更好的方法来解决这个问题?
先谢谢!
答案 0 :(得分:0)
是的,他们将使用相同的实例。
该模式是单例,您可以导出并使全局变量,整个应用程序内存中的相同位置将是可见的。
在调试器的帮助下,您可以深入分析require
代码,并看到Nodejs将缓存该调用的结果并每次都返回相同的实例。
NodeJS源代码:
如果您想要的结果是具有不同的实例,则可以浅层克隆该对象。
var globals = _.extend({}, require('./public/js/globals')); //ecma5 + underscore.js
var globals = Object.assign({}, require('./public/js/globals')); //ecma6