首页 > 解决方案 > 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

标签: node.jssequelize.js

解决方案


当我们打电话

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))并开始深入挖掘,您还可以验证和理解更多。下面是调用堆栈的样子的快照

调用栈


推荐阅读