Не удается прочитать свойство 'define' из undefined (секвелировать определяющую модель)? - PullRequest
0 голосов
/ 03 января 2019

Я использую node.js версии 10.13.0, с SEQUELIZE версии 4.42.0, и я пытаюсь определить набор моделей, но у меня есть проблема в файле date.js, он говорит:

Невозможно прочитать свойство 'define' из undefined, это происходит, когда я запускаю тест с файлом 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

в качестве конечного результата, я хочу построить эту базу данных, как описано в схеме: class diagram scheme

спасибо заранее.

1 Ответ

0 голосов
/ 03 января 2019

Внимательно прочитайте ваше сообщение об ошибке. В нем говорится, что вы не можете читать слова "define" из "undefined".

Единственное место, которое вы читаете "определить", находится в начале вашего date.js, где вы sequelize.define(....

Таким образом, вы читаете «определение» из неопределенного означает, что «продолжение» не определено. И это может быть правдой, потому что вы не импортируете туда какую-либо библиотеку. И если вы импортируете что-то, ваш импорт неправильный. В противном случае «sequelize» не будет «undefined» и, таким образом, сообщение об ошибке не будет отображаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...