平均堆栈 - 可以使用“全局”模块在服务Web应用程序时导致问题?

时间:2017-05-15 14:52:53

标签: javascript node.js web mean-stack meanjs

我有一个相当具体的问题:

我有一个变量(一个特定的构造文件名),我需要从一个文件中的API中获取该变量作为变量存储在另一个文件中。我的代码设置的方式,没有一种方法(我能想到)将这个变量从一个文件转换到另一个文件而不使用全局变量。我一直在寻找一些不同的方法,并决定创建一个全局模块。

这是我的全局模块(globals.js)中的代码:

var globals = {
    'new_img': ''
}

module.exports = globals;

我写过:

var globals        = require('./public/js/globals');

在我的server.js和我的routes.js中,这样我的所有API和控制器都可以访问这个模块。

现在,我的实际问题是: 当我提供此Web应用程序并且多个人拥有自己的网页实例时,他们是否都使用相同的全局模块?这不是我想要的效果,所以我想知道是否有其他人有更好的方法来解决这个问题?

先谢谢!

1 个答案:

答案 0 :(得分:0)

是的,他们将使用相同的实例。

该模式是单例,您可以导出并使全局变量,整个应用程序内存中的相同位置将是可见的。

在调试器的帮助下,您可以深入分析require代码,并看到Nodejs将缓存该调用的结果并每次都返回相同的实例。

NodeJS源代码

enter image description here enter image description here

如果您想要的结果是具有不同的实例,则可以浅层克隆该对象。

var globals  = _.extend({}, require('./public/js/globals')); //ecma5 + underscore.js

var globals = Object.assign({}, require('./public/js/globals')); //ecma6