模块在node.js中初始化并在请求之间保持其状态

时间:2012-12-24 12:12:33

标签: node.js module initialization

我的场景:我要上传一些少量的配置数据,并且很少将数据从数据库更改为exports.config,我想使用而不是配置文件,以便应用管理员(不是系统管理员) :)可以通过Web界面配置应用程序,我想确保每次此模块require'时都不会重新加载此数据。

我是否正确地假设我在node.js模块中的任何[初始化]代码(在函数定义之外)它将在每个进程生命周期中执行一次,无论我require这个模块有多少次?

可能是一个愚蠢的问题,但我正在努力理解node.js如何运作的某些方面。

1 个答案:

答案 0 :(得分:2)

每个进程生命周期可能需要多次文件/模块,但只执行一次。至少在默认情况下。

这很适合您,因为您可以在应用初始化时简单地查询config表,并且导出的值将保持不变,直到应用重新启动。


来自nodejs module caching docs

  

模块在第一次加载后进行缓存。这意味着(除其他外)每次调用 require('foo') 将获得完全相同的返回对象,如果它将解析为同一个文件。

     

多次调用 require('foo') 可能不会导致模块代码多次执行。这是一个重要的特征。有了它,就可以返回“部分完成”的对象,从而允许加载传递依赖,即使它们会导致循环。

     

如果你想让模块多次执行代码,那么导出一个函数,并调用该函数。