mysql - Error de Sequelize: Include inesperado. El elemento debe ser un Modelo, una Asociación o un objeto
Estoy recibiendo el error cuando hago una llamada a mi API con una solicitud GET:
Include unexpected. Element has to be either a Model, an Association or an object.
Mis modelos se ven así:
module.exports = (sequelize, Sequelize) => {
const Productions = sequelize.define("productions", {
id: {
type: Sequelize.SMALLINT,
autoIncrement: true,
primaryKey: true
},
setupTime: {
type: Sequelize.DECIMAL(6, 3)
},
notes: {
type: Sequelize.TEXT
}
}, { timestamps: false });
return Productions;
};
module.exports = (sequelize, Sequelize) => {
const ProductionPrints = sequelize.define("productionPrints", {
id: {
type: Sequelize.SMALLINT,
autoIncrement: true,
primaryKey: true
},
compDate: {
type: Sequelize.DATE
}
}, { timestamps: false });
return ProductionPrints;
};
La relación entre los modelos se define aquí:
db.productions = require("./productions.model.js")(sequelize, Sequelize);
db.productionprints = require("./production-prints.model.js")(sequelize, Sequelize);
db.productions.hasOne(db.productionprints, {
foreignKey: {
name: 'productionId',
allowNull: false
}
});
db.productionprints.belongsTo(db.productions, { foreignKey: 'productionId' });
Y la consulta de Sequelize se ve así:
const db = require("../models");
const Productions = db.productions;
const ProductionPrints = db.productionPrints;
exports.findAll = (req, res) => {
Productions.findAll({
include: [ { model: ProductionPrints, as: 'prints' } ]
})
.then(data => {
res.send(data);
})
.catch(err => {
res.status(500).send({
message:
err.message || "An error occurred while finding the productions."
});
});
};
He buscado a otros con el mismo problema pero no he tenido éxito con ninguna de las soluciones publicadas sobre esos problemas. Generalmente era causado por errores tipográficos o errores en las rutas de require. He revisado eso y todos mis otros includes funcionan, solo que no en ninguno de los modelos que incluyo en el modelo de producción.
Cualquier comentario es muy apreciado.
Respuesta #1
El error estaba siendo causado por un error tipográfico:
db.productions = require("./productions.model.js")(sequelize, Sequelize);
db.productionprints = require("./production-prints.model.js")(sequelize, Sequelize);
cuando esto estaba siendo referido en lo asignado a una constante:
const Productions = db.productions;
const ProductionPrints = db.productionPrints;
vergüenza para mí por cambiar el uso de mayúsculas:
db.productionprints != db.productionPrints
Respuesta #2
Tuve el mismo problema, esto generalmente es causado por un problema de nombres. Para rastrear el problema, puedes revisar uno de los siguientes lugares para resolverlo
- verifica si estás llamando al nombre de la clase del modelo correcto
- Al importar modelos, tenga cuidado de no llamar al nombre del archivo en lugar del nombre del modelo => el que se exportó
3. verifica si obtuviste tu asociación correctamente llamando al modelo exportado, no al nombre del archivo
- verifica si tus casos, por ejemplo usuarios vs Usuarios.
Un consejo adicional es usar el mismo nombre para el modelo y el nombre del archivo para evitar estos problemas, porque en el momento en que los haces diferentes es probable que cometas estos errores
