Я определил отношение один-к-одному в моей базе данных 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
};