How to create another instance with afterCreate hook in sequelize

Viewed 2025

I need to create another instance of my model Alumnok after create another instance of Usuario.

I'm using sequelize to create one model instance of Alumnok thought POST after create a Usuario instance with the same Usuario's fields.

'use strict'
const models = require('../models');

module.exports = (sequelize, DataTypes) => {
    const Usuario = sequelize.define('Usuario', {
        email: {
            type: DataTypes.STRING(30),
            primaryKey: true
        },
        dni: DataTypes.STRING,
        direccion: DataTypes.STRING,
        nombre: DataTypes.STRING,
        apellidos: DataTypes.STRING,
        password: DataTypes.STRING,
        fechaNac: DataTypes.STRING,
        rol: DataTypes.INTEGER,
        foto: DataTypes.STRING
    }, {
        hooks:{
            afterCreate: (usuario) => {
                return models.Alumnok.create({
                    email: usuario.email,
                    dni: usuario.dni,
                    direccion: usuario.direccion,
                    nombre: usuario.nombre,
                    apellidos: usuario.apellidos,
                    password: usuario.password,
                    fechaNac: usuario.fechaNac,
                    rol: usuario.rol,
                    foto: usuario.foto
                })
                console.log("Se ha creado el usuario con el nombre: " + usuario.nombre);
            }
        }
    });
    Usuario.associate = function(models) {
        // associations can be defined here
    };
    return Usuario;
};

This is the terminal result.

Unhandled rejection TypeError: Cannot read property 'create' of undefined
    at Function.afterCreate (C:\Users\Jose Fernando\Desktop\api\models\usuario.js:21:31)
    at Promise.each.hook (C:\Users\Jose Fernando\Desktop\api\node_modules\sequelize\lib\hooks.js:130:35)
    at tryCatcher (C:\Users\Jose Fernando\Desktop\api\node_modules\bluebird\js\release\util.js:16:23)
    at Object.gotValue (C:\Users\Jose Fernando\Desktop\api\node_modules\bluebird\js\release\reduce.js:155:18)
    at Object.gotAccum (C:\Users\Jose Fernando\Desktop\api\node_modules\bluebird\js\release\reduce.js:144:25)
    at Object.tryCatcher (C:\Users\Jose Fernando\Desktop\api\node_modules\bluebird\js\release\util.js:16:23)
    at Promise._settlePromiseFromHandler (C:\Users\Jose Fernando\Desktop\api\node_modules\bluebird\js\release\promise.js:512:31)
    at Promise._settlePromise (C:\Users\Jose Fernando\Desktop\api\node_modules\bluebird\js\release\promise.js:569:18)
    at Promise._settlePromiseCtx (C:\Users\Jose Fernando\Desktop\api\node_modules\bluebird\js\release\promise.js:606:10)
    at _drainQueueStep (C:\Users\Jose Fernando\Desktop\api\node_modules\bluebird\js\release\async.js:142:12)
    at _drainQueue (C:\Users\Jose Fernando\Desktop\api\node_modules\bluebird\js\release\async.js:131:9)
    at Async._drainQueues (C:\Users\Jose Fernando\Desktop\api\node_modules\bluebird\js\release\async.js:147:5)
    at Immediate.Async.drainQueues [as _onImmediate] (C:\Users\Jose Fernando\Desktop\api\node_modules\bluebird\js\release\async.js:17:14)
    at runCallback (timers.js:705:18)
    at tryOnImmediate (timers.js:676:5)
    at processImmediate (timers.js:658:5)
1 Answers

Use sequelize.models.Alumnok.create in place of models.Alumnok.create

Related