Я пытаюсь использовать ловушку Sequelize для автоматического создания профиля при создании пользователя, но, похоже, он не работает. Кто-нибудь может указать, что я делаю не так? Примечание. Я использую пакеты Sequelize 5.21.6 и mysql2 2.10.0.
Вот мои модели:
Пользователь. js
'use strict';
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define(
'User',
{
name: DataTypes.STRING,
username: DataTypes.STRING,
email: DataTypes.STRING,
password: DataTypes.STRING,
},
{
hooks: {
afterCreate: (user, options) => {
Profile.create({ userId: user.id });
},
},
}
);
User.associate = function (models) {
User.hasOne(models.Profile);
};
return User;
};
Профиль. js
'use strict';
module.exports = (sequelize, DataTypes) => {
const Profile = sequelize.define(
'Profile',
{
location: DataTypes.STRING,
websiteUrl: DataTypes.STRING,
bio: DataTypes.TEXT,
userId: DataTypes.INTEGER,
},
{}
);
Profile.associate = function (models) {
Profile.belongsTo(models.User);
};
return Profile;
};
Вот мои миграции:
Миграция пользователя
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
name: {
type: Sequelize.STRING
},
username: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING
},
password: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Users');
}
};
Профиль миграции
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Profiles', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER,
},
location: {
type: Sequelize.STRING,
},
websiteUrl: {
type: Sequelize.STRING,
},
bio: {
type: Sequelize.TEXT,
},
userId: {
type: Sequelize.INTEGER,
references: {
model: 'Users',
key: 'id',
},
},
createdAt: {
allowNull: false,
type: Sequelize.DATE,
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE,
},
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Profiles');
},
};
А вот мой роутер:
const express = require('express');
const router = express.Router();
const models = require('../models');
// Create a new user
router.post('/', (req, res, next) => {
models.User.create({
name: req.body.name,
username: req.body.username,
email: req.body.email,
password: req.body.password,
})
.then((user) => {
res.json({ message: 'Profile created successfully' });
})
.catch((err) => {
res.json({ message: err.errors[0].message });
});
});