Node.js - require()d模块的范围是什么?

时间:2014-09-25 10:02:54

标签: node.js express requirejs require

我正在尝试组织使用Express 4开发的Node.js应用程序,并且对使用require()导入的模块的范围感到困惑。

想象一下,我使用require('./services/user')在模块中导入服务,例如 routes / user.js

var userService = require('./services/user');

然后我在另一个模块 routes / department.js 中执行相同的require('./services/user')

我的问题是:userService是user.js和department.js中的同一个实例,还是每个实例都拥有自己的userService对象?也就是说,一旦你通过module.exports = XXX导出一些元素,如果你需要相同的文件,你会得到总是相同的实例吗?你能告诉我在Node.js文档中指定的位置吗?

1 个答案:

答案 0 :(得分:4)

如果我正确理解你的问题,你有这些文件:

.
|_. app.js
|_. routes/
  |_. user.js
  |_. department.js
  |_. services/
    |_. user

您的代码执行此操作:

app.js call user.js
    user.js call user
app.js call department.js
    department.js

在这种情况下,在第一次需要用户时,它会被放在require.cache的缓存中。

然后第二次调用它时,调用者得到require.cache['./service/user'],其中存储了你的对象。

因此,在department.js和user.js中都有相同的对象。

来源:

编辑:

其他有用的链接:

node.js require() cache - possible to invalidate?