node.js - “myTable”未与模型关联

标签 node.js express sequelize.js

我正在开发一个快速 Sequelize 项目。

我遇到了 Sequelize 问题。

我有一个简单的架构,如文档所述:

class Task extends Model {}
Task.init({ title: Sequelize.STRING }, { sequelize, modelName: 'task' });
class User extends Model {}
User.init({ username: Sequelize.STRING }, { sequelize, modelName: 'user' });

User.hasMany(Task); // Will add userId to Task model
Task.belongsTo(User); // Will also add userId to Task model

但是当我使用 include 进行查询时

sequelize.models['task'].findAll({include:[{all:true}]});

我面临一些问题:

第一个:

this._getIncludedAssociation is not a function

这里是github源代码:https://github.com/sequelize/sequelize/blob/master/lib/model.js#L615

我只是将this更改为Model来检查。

这个错误消失了,但出现了第二个错误(与第一个错误相关,因为我改变了行为)

User is not associated to Model

但是应该说用户与任务没有关联

(错误的github:https://github.com/sequelize/sequelize/blob/master/lib/model.js#L711)

这就像 Model 类没有实例化......

我的代码可能有什么问题?也许事实是通过 sequelize.models[modelName] 调用模型?我为此苦苦挣扎了很长时间......

谢谢。

<小时/>

更多信息:

Sequelize 版本:^5.7.0

架构:

在应用程序启动时,我的所有模型都存储在我的流程中存储的自定义数据库类中。

在任何 Controller 内,我都会调用一个存储库类,例如使用如下所示的方法,其中可以通过 this.model 访问所需的模型:

findAll(options, force = false) {
        let data = this.performExtraOptions(options);
        data.paranoid = force;

        if (this.isDebug) {
                this.req.debug.addDatabaseCall('Table ' + this.model.getTableName() + ' findAll', data);

        }
        return this.model.findAll(data);
}
<小时/>

当我使用 Chrome 调试器检查时,模型显示如下: const model = class extends Model {};

enter image description here

最佳答案

好的。

在阅读sequelize代码时,我发现算法内部需要options.model

问题是我也在查询选项中发送了模型,但作为模型名称(字符串)。

算法将option.model转化为Model的实例对象来进行处理。

所以我只需重命名作为查询选项传递的变量。

这行代码是问题所在: https://github.com/sequelize/sequelize/blob/master/lib/model.js#L493

 if (!options.model) options.model = this;

关于node.js - “myTable”未与模型关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55761585/

相关文章:

Node.js Rest api 验证来自 url 的传入 json

node.js - 对象数组中的 MongoDB,仅显示具有指定值的对象

javascript - 如何列出 Express 安装的应用程序的所有 REST 端点?

mysql - 在 sequelize 中关联两个表

javascript - 如何使用带有 sequelize 和 mysql 的 Hook (beforeCreate) 保存密码

javascript - 什么时候使用 process.nextTick 最好?

javascript - 使用 express-handlebars 加载助手

javascript - 使用多个路由时,使用express和chokidar进行热重载会导致http header 发送错误

javascript - 如何在 sequelize findAll() 中获取简单数组?

json - 无法获取 JSON 对象的长度