无法读取未定义的属性“ define”(序列化定义模型)?

时间:2019-01-03 15:21:42

标签: javascript node.js ecmascript-5

我正在使用node.js版本10.13.0和SEQUELIZE版本4.42.0,并且尝试定义一组模型,但是date.js文件存在问题,它说:

  

无法读取未定义的属性“ define”   当我使用connect.js文件运行测试时,就会发生这种情况。   这是项目的结构:

project structure image 1 project structure image 2

所以我在date.js中执行以下操作

function init(){
console.log(sequelize);
const Date = sequelize.define('date' , {
    id : {
        type : sequelize.DataTypes.BIGINT(5),
        allowNull : false,
        autoIncrement : true,
        primaryKey : true
    },
    starting_date : {
        type : sequelize.DataTypes.DATE,
        allowNull : true,
        defaultValue : null
    },
    ending_date : {
        type : sequelize.DataTypes.DATE,
        allowNull : true,
        defaultValue: null
    },
    now : {
        type : sequelize.DataTypes.BOOLEAN,
        allowNull : true,
        defaultValue : true
    }
});

Date.associate = function(models){
    Date.belongsToMany(models.email , {through : models.task});
    Date.belongsToMany(models.user , {through : models.task});
};

return Date;
}
module.exports = init();

这是connect.js脚本:

const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = 'development';
const config = require('../config/config')[env];

const sequelize  = new Sequelize(config.database.database_name, 
config.database.username, config.database.password, 
config.database.database_config);

var db = {
    sequelize : sequelize,
    Sequelize : Sequelize
};

fs.readdirSync("./models/").filter(file => {
    return (file.indexOf('.') !== 0) && (file !== basename) && 
(file.slice(-3) === '.js');
}).forEach(file => {
    var model = sequelize.import(path.join("./models", file));
    db[model.name] = model;
});

Object.keys(db).forEach(modelName => {
    if (db[modelName].associate) {
       db[modelName].associate(db);
    }
 });

 db.authenticate().then(() => {
console.log('database worked !!!');
}).catch(error => {
   console.log(error.stack);
});


module.exports = db;

整个项目都在此链接中:https://github.com/ekkatharisi/mailer

作为最终结果,我想按照scheme中的描述构建此数据库: class diagram scheme

先谢谢您

1 个答案:

答案 0 :(得分:0)

仔细阅读您的错误消息。它指出您无法从“未定义”中读取“定义”。

您唯一读到“定义”的地方是在{。{1}}的date.js开头。

因此,您正在从未定义的含义中读取“定义”,即“序列化”未定义。这可能是正确的,因为您没有在那里导入任何库。而且,如果要导入某些内容,则导入是错误的。否则,“ sequelize”将不会是“ undefined”,从而不会显示错误消息。

相关问题