Sequelize Express示例 – 为什么不重复调用fs.readdirSync?

编辑(我想我解决了它)

这是节点需求caching! 所以第一次它需要models/index.js它实际上运行该文件,并打到readdirSync调用被执行。

然后,下一次我们需要models/index.js ,只需从caching中取出它 – 无需再次点击磁盘,以确认为什么它不是一个完全的低效率。

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

这与Sequelize ORM项目提供的快速示例相关。 GitHub repo是https://github.com/sequelize/express-example

这个问题

我很困惑,为什么每次需要models/index.js文件时都不会调用fs.readdirSync 。 有人可以解释为什么吗?

有问题的代码…

楷模

models目录开始,您将find一个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 #########'); }); 

还有两个定义的模型,即task.jsuser.js ,它们定义了Schema并设置了一些关系。

路线

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

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

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

两条路线都以var models = require('../models');

app.js文件

app.js文件里面,包含和使用了路由。

重复的问题更多的细节

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

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

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

这是更多的node.js问题,

在初始加载后的node.js中,模块被caching,所以当你第一次打开require时,它将被caching,并且不会再次执行所有的函数

请参考有关节点如何工作或参考的问题http://fredkschott.com/post/2014/06/require-and-the-module-system/