Foo.createBar () не является функцией при использовании однозначного сопоставления - PullRequest
0 голосов
/ 05 апреля 2020

Я определил отношение один-к-одному в моей базе данных SQLite, и все таблицы генерируются правильно (включая внешний ключ в userData -таблице), создание экземпляров User -модели выполняется без проблемы, но когда я пытаюсь создать UserData -экземпляр с использованием mixin, как это определено в документации Sequelize, возникает ошибка, что это не функция.

Выполненный код:

//the necessary dependencies have been imported.
User.findOne( { where: { email: 'bla@bla.nl' } }
   .then( (user) => {
        if(user) {
            user.createUserData({
                firstName: 'John',
                lastName: 'Doe',
                academicLevel: 'BSc'
            })
                .catch( (err) => { console.log(err); });
        }
    }).catch( (err) => { console.log(err); });

Вывод:

TypeError: user.createUserData is not a function ...

Определения:

//user.js: contains user model
module.exports = function(sequelize, type){
    // -- MODEL -- //
    var model = sequelize.define('user', {
        email: {
            type: type.STRING,
            allowNull: false,
            unique: true,
            validate: {
                isEmail: true
            }
        },
        password: {
            type: type.STRING,
            allowNull: false
        },
        isAdmin: {
            type: type.BOOLEAN,
            allowNull: false,
            defaultValue: false
        }
    },{
    });
//userData.js: contains userData model
module.exports = function(sequelize, type){
    // -- MODEL -- //
    var model = sequelize.define('userData', {
        firstName: {
            type: type.STRING,
            allowNull: false,
        },
        lastName: {
            type: type.STRING,
            allowNull: false,
        },
        academicLevel: {
            type: type.STRING,
            allowNull: false,
            defaultValue: '',
            validate:{
                isIn: [['', 'BSc', 'MSc']]
            }
        },
        photo: {
            type: type.BLOB,
            allowNull: true
        }
    },{
    });
// userDb.js: defines the Sequelize-instance for the user database.

// -- MODULE IMPORTS -- //
var fs = require('fs');
var path = require('path');
var { Sequelize, DataTypes } = require('sequelize');

// -- MODEL IMPORTS -- //
var userScheme = require(path.join(__dirname + '/../dbSchemes/userDb/user'));
var userDataScheme = require(path.join(__dirname + '/../dbSchemes/userDb/userData'));

// -- DATABASE CONNECTION -- //
var sequelize = new Sequelize({
    dialect: 'sqlite',
    storage: dbFile
});

// -- MODELS -- //
var User = userScheme(sequelize, DataTypes);
var UserData = userDataScheme(sequelize, DataTypes);

User.hasOne(UserData);
UserData.belongsTo(User);

// -- MODEL-DB SYNCHRONISATION -- //
sequelize.sync()
    .then()
    .catch((err) => {
        console.log(err);
    });

// -- MODULE EXPORTS -- //
module.exports = {
    User,
    UserData
};
...