【问题标题】:Modules initialization in node.js and persisting their state between requestsnode.js 中的模块初始化并在请求之间保持其状态
【发布时间】:2012-12-24 20:34:12
【问题描述】:

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

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

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

【问题讨论】:

    标签: node.js module initialization


    【解决方案1】:

    是的。

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

    这非常适合您,因为您只需在应用初始化时查询config 表,导出的值将保持不变,直到应用重新启动。


    来自nodejs module caching docs

    模块在第一次加载后被缓存。这意味着(除其他外)对 require('foo') 的每次调用都将返回完全相同的对象,前提是它会解析为同一个文件。

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

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

    【讨论】:

    • 非常感谢您的链接,我显然错过了它,但我读到的是我的假设是正确的 - 模块代码只会执行一次......或者你的意思是“是” ?还是我错过了什么?对不起...
    • @esp,我的错,我将您的问题理解为“每个请求”,而不是“每个进程生命周期”。
    猜你喜欢
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多