当前位置 : 主页 > 网页制作 > Nodejs >

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

来源:互联网 收集:自由互联 发布时间:2021-06-16
我正在尝试组织使用Express 4开发的Node.js应用程序,并且对使用require()导入的模块的范围感到困惑. 想象一下,我使用require(‘./ services / user’)在诸如routes / user.js之类的模块中导入服务:
我正在尝试组织使用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文档中指定的位置吗?

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

.
|_. 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中都有相同的对象.

资源:

> http://nodejs.org/docs/latest/api/modules.html#modules_caching
> http://nodejs.org/docs/latest/api/modules.html#modules_cycles(帮帮我理解)
> Understanding Node.js modules: multiple requires return the same object?
> Self modifying code in node.js, would cluster work?(关于require.cache)

编辑:

其他有用的链接:

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

网友评论