【问题标题】:Sequelize Error: Include unexpected. Element has to be either a Model, an Association or an object续集错误:包括意外。元素必须是模型、关联或对象
【发布时间】:2020-09-28 00:21:10
【问题描述】:

当我使用 get 请求调用我的 API 时收到错误消息:

Include unexpected. Element has to be either a Model, an Association or an object.

我的模型如下所示:

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

模型之间的关系在这里定义:

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

sequelize 查询如下所示:

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."
            });
        });
};

我已经检查了其他人的问题,但对于这些问题发布的任何解决方案都无济于事。通常它是由拼写错误或要求路径中的错误引起的。我已经检查了这些以及我所有其他包含的工作,只是没有检查我在产品模型中包含的任何模型。

非常感谢任何反馈。

【问题讨论】:

    标签: mysql node.js typescript sequelize.js


    【解决方案1】:

    我有同样的问题,这通常是由命名问题引起的,要跟踪问题,您可以检查以下地方之一来解决它

    1. 检查您是否调用了正确的模型类名称
    2. 导入模型时注意不要调用文件名而不是模型名=>导出的那个

    3.通过调用导出的模型而不是文件名来检查您的关联是否正确

    1. 检查您的案例,例如用户与用户。

    一个额外提示是对模型和文件名使用相同的名称以避免这些问题,因为当你使它们不同时,你可能会犯这些错误

    【讨论】:

      【解决方案2】:

      错误是由拼写错误引起的:

      db.productions = require("./productions.model.js")(sequelize, Sequelize);
      db.productionprints = require("./production-prints.model.js")(sequelize, Sequelize);
      

      当 this 在分配给常量时被引用:

      const Productions = db.productions;
      const ProductionPrints = db.productionPrints;
      

      为改变我的案例使用而感到羞耻:

      db.productionprints != db.productionPrints
      

      【讨论】:

        猜你喜欢
        • 2017-10-11
        • 2019-09-17
        • 1970-01-01
        • 2019-02-09
        • 2020-05-30
        • 2015-03-26
        • 1970-01-01
        • 2013-05-27
        • 1970-01-01
        相关资源
        最近更新 更多