node.js - 在 NodeJS 上的其他模块上需要一个模块如何在入口点上可用?
问题描述
这可能是一个重复的问题,但我找不到任何东西。由于我正在学习NodeJS,我认为我没有使用正确的单词进行搜索,因此很难找到答案。
情况如下:
我目前正在学习有关 NodeJS 和编写 API 的在线课程。在当前步骤中,我们使用 Winston 库来记录错误。讲师在 Index,js 上进行了配置,这是应用程序的入口点,如下所示:
文件:index.js
const winston = require('winston');
const errorHandler = require(./middleware/error.js);
//(...) some other imports
app.use(errorHandler);
winston.add(winston.transports.File,{filename:'logFile.log'});
在我们在课程中创建的用于处理错误的其他模块中,他需要 winston 并简单地调用来记录错误。像这样的东西:
文件:error.js
const winston = require('winston');
function errorHandler(err,req,res,next){
winston.error(err.message,err);
res.status(500).send("something failed");
}
module.exports = errorHandler;
做了测试后,错误正确写入文件,我的问题是:它是如何工作的?如何从 error.js 的其他所需版本中看到在 index.js 中对 winston 的“所需版本”所做的设置?
从 index.js 我们也导入了 error.js,所以我可以想象这两个模块以某种方式共享这个 winston 对象,但同样,我不明白它是如何或在哪里共享的。
再次,如果我在这里没有使用正确的术语来引用任何内容,请原谅,我会接受任何建议。
谢谢。
解决方案
当一个模块在 node.js 中加载时,它会被require()
子系统缓存。因此,当您require()
再次执行此操作时,这意味着您将获得与前一个完全相同的模块。
所以......如果您在第一次加载模块后对其进行了初始化,并且该模块存储了一些表示该初始化的状态,那么该模块的后续使用将使用相同的(已经初始化的)模块。
在我们在课程中创建的用于处理错误的其他模块中,他需要 winston 并简单地调用来记录错误。
winston
它获取先前已初始化/配置的模块的相同实例。
做了测试后,错误正确写入文件,我的问题是:它是如何工作的?如何从 error.js 的其他所需版本中看到在 index.js 中对 winston 的“所需版本”所做的设置?
如上所述的模块缓存。只有一个winston
模块是共享的,所以如果它在一个地方初始化/配置,所有人都将使用该配置。
推荐阅读
- dataframe - 带 loc 的 Python 循环
- kotlin - java.lang.RuntimeException:无法创建类 ViewModel 的实例
- r - 重命名 data.table 中的分组变量
- google-sheets - 列标题到行
- sql - SQL - Toad for Oracle v11.6。- 尝试在使用 Distinct 后为特定字段数据中的每个唯一值选择顶行
- javascript - 如何访问react-router-dom中标签内的href?
- elasticsearch - 弹性搜索从嵌套对象中删除元素
- c# - 在 C# 上修剪度数符号
- javascript - 如何将 Google Tag Manager 与 React Native 应用程序集成?
- dependencies - 如何确保 Julia 代码和相关依赖项的可重复性?