将移动类方法推广到单个文件

时间:2018-05-14 11:59:33

标签: node.js sequelize.js

这是一个基于我对Node.js缺乏理解的问题。我正在尝试整理我的代码,并遇到了问题。

我定义了一个续集模型如下:

module.exports = (sequelize, Sequelize) => {
    // Define model
    let model= require('./lib/define')(sequelize, Sequelize);

    // Define model methods
    model.getOne = function(params) {
        return sequelize.models.model.findOne({
            include: [{
                model: sequelize.models.model2,
                include: [
                    {
                        model: sequelize.models.model3,
                        attributes: ['column1', 'column2'],
                        where: {
                            owner: params.param1,
                            name: params.param2,
                        }
                    },
                    {
                        model: sequelize.models.model4
                    }
                ]
            }],
            where: {
                // other clauses
            }
        });
    };

    return model;
};

这很好用。创建模型,我可以通过我的应用程序以及基于类的方法访问它。

但是,我想将更多基于类的方法合并到这个模型中,并且为了帮助防止凌乱的代码,我想将它们放在单独的文件中。问题是,这些方法需要访问sequelize对象,但我不知道如何将它放入我的应用程序中。我不想每次调用这个方法时都要将sequelize对象和我的参数对象一起传递。

我对基于类的方法的当前文件是:

module.exports = function(params) {
        return sequelize.models.model.findOne({
            include: [{
                model: sequelize.models.model2,
                include: [
                    {
                        model: sequelize.models.model3,
                        attributes: ['column1', 'column2'],
                        where: {
                            owner: params.param1,
                            name: params.param2,
                        }
                    },
                    {
                        model: sequelize.models.model4
                    }
                ]
            }],
            where: {
                // other clauses
            }
        });
    };

1 个答案:

答案 0 :(得分:1)

从它的外观来看,您似乎需要models而不是sequelize对象。

只需要在帮助文件中输入models文件即可获得models/index.js个对象。现在,您可以使用models.model2超出所有模型。

例如,像这样

const models = require('../../models');
models.model2.findAll()