【问题标题】:Node.js - What's the scope of the require()d modules?Node.js - require()d 模块的范围是什么?
【发布时间】:2014-11-20 01:28:06
【问题描述】:

我正在尝试组织一个使用 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 文档中指定的位置吗?

【问题讨论】:

  • routes/user.js 和 route/department.js 是否需要同一个代码?
  • 是的,在 express app.js 模块中:app.use('/users', userRoutes);app.use('/departments', departmentRoutes);

标签: node.js express requirejs require


【解决方案1】:

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

.
|_. 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?

【讨论】:

  • 谢谢!完美的答案。所以如果我理解得很好,只要有一个共同的祖先模块,所有导入的模块都会被捕获并在所有它们之间共享?
  • 对了,只要启动的是同一个node实例,需要的模块是所有模块共享的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
相关资源
最近更新 更多