Sequelize Express 示例中的代码说明 (fs)
Code Explanation (fs) from Sequelize Express Example
我目前正在使用 Node/Express 学习 Sequelize,我正在查看此处发布的示例:https://github.com/sequelize/express-example
我想全面了解它是如何工作的,以及它在做什么,但我以前从未使用过 fs,我很难弄清楚这段代码的作用,来自 index.js:
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;
});
Object.keys(db).forEach(function(modelName) {
if ("associate" in db[modelName]) {
db[modelName].associate(db);
}
});
请记住,变量 db 是 Sequelize 的一个实例。任何人都可以向我解释这个吗?其余部分都说得通,但我就是想不通这一部分。谢谢!
第一次调用 readdirSync
gets all the files in the directory of the currently executing script in a synchronous fashion (in this case /models/index.js
is the currently executing script, so __dirname
指向 models
目录)。该目录下的文件为['index.js', 'task.js', 'user.js']
.
.readdirSync(__dirname)
下面的函数调用过滤掉以 .
开头或名为 index.js
的文件
所以在这个函数调用之后,文件列表应该是 ['task.js', 'user.js']
.
.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;
});
遍历数据库中的每个模型(任务和用户)并调用其关联函数(如果有的话),大概是为了设置模型、外键、级联等之间的任何关联。
Object.keys(db).forEach(function(modelName) {
if ("associate" in db[modelName]) {
db[modelName].associate(db);
}
});
这似乎是一个相当有用的习惯用法,因为它允许您将模型定义(如任务和用户)保存在单独的文件中,并且可以防止您不得不使用单独的代码行(其中可能有很多)。这样做可以让您继续添加新模型,而不会忘记添加代码以将其加载到您的 index.js 文件中。
我目前正在使用 Node/Express 学习 Sequelize,我正在查看此处发布的示例:https://github.com/sequelize/express-example
我想全面了解它是如何工作的,以及它在做什么,但我以前从未使用过 fs,我很难弄清楚这段代码的作用,来自 index.js:
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;
});
Object.keys(db).forEach(function(modelName) {
if ("associate" in db[modelName]) {
db[modelName].associate(db);
}
});
请记住,变量 db 是 Sequelize 的一个实例。任何人都可以向我解释这个吗?其余部分都说得通,但我就是想不通这一部分。谢谢!
第一次调用 readdirSync
gets all the files in the directory of the currently executing script in a synchronous fashion (in this case /models/index.js
is the currently executing script, so __dirname
指向 models
目录)。该目录下的文件为['index.js', 'task.js', 'user.js']
.
.readdirSync(__dirname)
下面的函数调用过滤掉以 .
开头或名为 index.js
的文件
所以在这个函数调用之后,文件列表应该是 ['task.js', 'user.js']
.
.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;
});
遍历数据库中的每个模型(任务和用户)并调用其关联函数(如果有的话),大概是为了设置模型、外键、级联等之间的任何关联。
Object.keys(db).forEach(function(modelName) {
if ("associate" in db[modelName]) {
db[modelName].associate(db);
}
});
这似乎是一个相当有用的习惯用法,因为它允许您将模型定义(如任务和用户)保存在单独的文件中,并且可以防止您不得不使用单独的代码行(其中可能有很多)。这样做可以让您继续添加新模型,而不会忘记添加代码以将其加载到您的 index.js 文件中。