gpt4 book ai didi

node.js - Sequelize Express 示例 - 为什么 fs.readdirSync 没有重复调用?

转载 作者:太空宇宙 更新时间:2023-11-04 00:27:54 25 4
gpt4 key购买 nike

编辑(我想我解决了)

这是 Node 需要缓存!因此,第一次需要 models/index.js 时,它实际上运行该文件并调用 readdirSync 并执行该调用。

然后,下次我们需要 models/index.js 时,它只是从缓存中提取它 - 无需再次访问磁盘来确认为什么它不是完全低效。

============

这与 Sequelize ORM 项目提供的 Express 示例有关。 GitHub 存储库是 https://github.com/sequelize/express-example

问题

我很困惑为什么每次需要 models/index.js 文件时都不调用 fs.readdirSync 。谁能解释一下为什么吗?

有问题的代码...

模型

models 目录开始,您将找到一个 index.js,它引导模型并调用 fs.readdirSync,后者读取该目录中的其余模型并加载它们(更准确地说是调用 sequelize.import)。

我向该文件添加了控制台日志。

fs
.readdirSync(__dirname)
.filter(function(file) {
return (file.indexOf(".") !== 0) && (file !== "index.js");
})
.forEach(function(file) {
var model = sequelize.import(path.join(__dirname, file));
db[model.name] = model;
console.log('######### INSIDE FS #########');
});

还定义了另外 2 个模型,即 task.jsuser.js,它们定义了架构并设置了一些关系。

路线

接下来,在routes目录中你会发现两个文件。

index.js 文件定义索引路由(列出用户及其任务的单个获取)。

users.js 文件定义具有一些 REST 端点的用户,以创建新用户或为用户创建/删除任务。

两条路线均以 var models = require('../models'); 开头

app.js 文件

app.js 文件中包含并使用路由。

更详细地重复问题

当我运行 npm start 并加载应用程序时,我看到控制台中两次显示来自 readdirSync 的 console.log。

但是,如果这 2 个路由都需要 models/index.js ,并且调用了 fs.readdirSync 来加载 2 个文件,为什么 fs.readdirSync 不会被调用 4 次? (或者如果我有更多的路线,包括 model/index.js ,那么许多路线乘以模型的数量)

或者以另一种方式询问 - 为什么控制台日志仅在应用程序启动时显示?

最佳答案

这更多的是一个 Node.js 问题,

在 Node.js 中,初始加载后,模块会被缓存,因此当您第一次点击 require 时,它​​将被缓存,并且不会再次按顺序执行所有函数

请参阅有关 Node require 如何工作的问题或像这样的引用 http://fredkschott.com/post/2014/06/require-and-the-module-system/

关于node.js - Sequelize Express 示例 - 为什么 fs.readdirSync 没有重复调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42100542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com