node.js - sequelize 中的 DataType 有什么作用?为什么在参数中传递它并在没有定义它的情况下运行?
问题描述
我看过这个教程,但有几件事我不明白。
该教程的链接是https://www.youtube.com/watch?v=xZMwg5z5VGk&t=872s
这将创建模型
module.exports = (sequelize, DataTypes) =>
sequelize.define('User', {
email:{
type: DataTypes.STRING,
unique: true
},
password: DataTypes.STRING
})
//这会导入模型
const fs = require('fs')
const path = require('path')
const Sequelize = require('sequelize')
const config = require('../config/config')
const db = {}
var a = ''
const sequelize = new Sequelize(
config.db.database,
config.db.user,
config.db.password,
config.db.options
)
fs
.readdirSync(__dirname)
.filter((file) =>
file !== 'index.js'
).forEach((file) =>
{
const model = sequelize.import(path.join(__dirname, file))
db[model.name] = model
})
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
数据类型从何而来?它不是从模块中导入的 为什么我需要将它作为参数传递?
而且我也无法理解这些线条
const model = sequelize.import(path.join(__dirname, file))
db[model.name] = model
解决方案
当我们打电话
var model = sequelize['import'](path.join(__dirname, file));
在加载模型的import
地方调用 sequelize 函数。你可以看看这里的代码
代码说this.importCache[path] = defineCall(this, DataTypes);
,所以我们知道它是如何得到的DataTypes
如果您查看调用堆栈并将断点设置在sequelize.define
或更好const model = sequelize.import(path.join(__dirname, file))
并开始深入挖掘,您还可以验证和理解更多。下面是调用堆栈的样子的快照
推荐阅读
- python - 连接两列并用零填充以具有恒定长度
- java - 为什么socket只发送1KB(425B)的数据?
- python - Python Dash 独立 HTML 文件与 Plotly 相同
- flutter - Flutter 在使用 InAppWebView 插件加载页面之前注入 css
- java - 我想使用 java 从 selenium 中的 Excel 中读取数据,但它抛出异常为“”main“java.lang.ExceptionInInitializerError”
- makefile - gnu 制作“叶子”先决条件
- java - 为什么它不打印计数值?
- java - Spring Boot:两个服务之间的路由请求
- python - 在一个文件夹中使用 npy 图像训练深度学习模型的方法
- java - 使用 Pdfcopy 合并 pdf