javascript - 如何在 sequelize 中使用 afterCreate 钩子创建另一个实例
问题描述
在创建另一个 Usuario 实例后,我需要创建我的模型 Alumnok 的另一个实例。
在创建具有相同字段的实例之后,我正在使用 sequelize 创建一个Alumnok
思想 POST的模型实例。Usuario
Usuario
'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)
解决方案
使用sequelize.models.Alumnok.create
代替models.Alumnok.create
推荐阅读
- python - 如何发挥更多功能更具体的替换功能
- orientdb - OrientDB 是否活跃和竞争?
- python - 删除带有条件的列表中的字典
- react-native - react native 中的步骤视图或时间轴视图
- python-3.x - OpenCV 定位质心在 PiCam 上出现错误
- authentication - Firebase 身份验证会话未过期
- android - Android 货币格式印度卢比符号不匹配
- c - 如果我在我的程序中写一个没有 goto 语句的标签会发生什么?
- scala - sbt-native-packager:如何将胖 jar 拆分为依赖项和代码以进行 Docker 层优化?
- python - 如何测试哪个子列表包含特定元素,然后打印该子列表中的元素