首页 > 解决方案 > 如何在 sequelize 中使用 afterCreate 钩子创建另一个实例

问题描述

在创建另一个 Usuario 实例后,我需要创建我的模型 Alumnok 的另一个实例。

在创建具有相同字段的实例之后,我正在使用 sequelize 创建一个Alumnok思想 POST的模型实例。UsuarioUsuario

'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;
};

这是最终结果。

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)

标签: javascriptmysqlsequelize.js

解决方案


使用sequelize.models.Alumnok.create代替models.Alumnok.create


推荐阅读