Sequelize.js feathersjs/sequelizejs->;模型未与模型关联

Sequelize.js feathersjs/sequelizejs->;模型未与模型关联,sequelize.js,feathersjs,Sequelize.js,Feathersjs,“服务”文件夹下有两个文件夹。他们正在单独呼叫服务。现在我想扩展一个模型来包含相关的模型,这会给出一个错误'info:TypeError:cannotread属性'model'of undefined' 数据库存在,sql server和关系也存在 文件服务\mic\activity\index.js 'use strict'; const service = require('feathers-sequelize'); const activity = require('./activity

“服务”文件夹下有两个文件夹。他们正在单独呼叫服务。现在我想扩展一个模型来包含相关的模型,这会给出一个错误'info:TypeError:cannotread属性'model'of undefined'

数据库存在,sql server和关系也存在

文件服务\mic\activity\index.js

'use strict';

const service = require('feathers-sequelize');
const activity = require('./activity-model');
const hooks = require('./hooks/index');

module.exports = function () {
    const app = this;

    const options = {
        Model: activity(app.get('mic_sequelize'))
    };

    app.use('/mic/activity', service(options));

    const activityService = app.service('/mic/activity');

    activityService.before(hooks.before);
    activityService.after(hooks.after);
};
文件服务\mic\activity\activity-model.js

'use strict';

const Sequelize = require('sequelize');

module.exports = function (sequelize) {
    const activity = sequelize.define('activity', {
        activity_pk: {
            type: Sequelize.INTEGER,
            primaryKey: true,
            autoIncrement: true,
            allowNull: false,
            unique: true
        },
        activity_plan_pk: {
            type: Sequelize.INTEGER,
            allowNull: false,
            unique: false
        },
        change_order_pk: {
            type: Sequelize.INTEGER,
            allowNull: true,
            unique: false
        },
        description: {
            type: Sequelize.STRING(255),
            allowNull: false,
            unique: false
        },
        id: {
            type: Sequelize.STRING(255),
            allowNull: false,
            unique: true
        }
    }, {
        freezeTableName: true,
        paranoid: false,
        timestamps  : false,
        underscored : false,
        tableName: 'Activity',
        classMethods: {
            associate() {
                activity.belongsTo(sequelize.models.activity_plan, {
                    allowNull: true,
                    as: 'activity_plan'
                });
                activity.belongsTo(sequelize.models.change_order, {
                    allowNull: false,
                    as: 'change_order'
                });
            }
        }
    });

    return activity;
};
文件服务\mic\activity\hooks\index.js

'use strict';

const globalHooks = require('../../../../hooks');
const hooks = require('feathers-hooks');
const auth = require('feathers-authentication').hooks;

exports.before = {
    all: [],
    find: [
        getRelatedInfo()
    ],
    get: [
        getRelatedInfo()
    ],
    create: [],
    update: [],
    patch: [],
    remove: []
};

exports.after = {
    all: [],
    find: [],
    get: [],
    create: [],
    update: [],
    patch: [],
    remove: []
};


function getRelatedInfo() {
    return function (hook) {
        hook.params.sequelize = {
            attributes: [
                'activity_pk',
                'activity_plan_pk',
                'change_order_pk',
                ['description', 'activity_description'],
                ['id', 'activity_id']
            ],
            include: [
                {
                    model: hook.app.services.activity_plan.Model,
                    as: 'activity_plan',
                    required: false,
                    attributes: [
                        ['description', 'activity_plan_description'],
                        ['id', 'activity_plan_id']
                    ]
                }
            ]
        }
    };
    return Promise.resolve(hook);
}
'use strict';

const globalHooks = require('../../../../hooks');
const hooks = require('feathers-hooks');
const auth = require('feathers-authentication').hooks;

exports.before = {
    all: [],
    find: [],
    get: [],
    create: [],
    update: [],
    patch: [],
    remove: []
};

exports.after = {
    all: [],
    find: [],
    get: [],
    create: [],
    update: [],
    patch: [],
    remove: []
};
文件服务\mic\activity\u plan\index.js

'use strict';

const service = require('feathers-sequelize');
const activity_plan = require('./activity_plan-model');
const hooks = require('./hooks/index');

module.exports = function () {
    const app = this;

    const options = {
        Model: activity_plan(app.get('mic_sequelize'))
    };

    app.use('/mic/activity_plan', service(options));

    const activityplanService = app.service('/mic/activity_plan');

    activityplanService.before(hooks.before);
    activityplanService.after(hooks.after);
};
文件服务\mic\activity\u plan\activity\u plan-model.js

'use strict';

const Sequelize = require('sequelize');

module.exports = function (sequelize) {
    const activity_plan = sequelize.define('activity_plan', {
        activity_plan_pk: {
            type: Sequelize.INTEGER,
            primaryKey: true,
            autoIncrement: true,
            allowNull: false,
            unique: true
        },
        description: {
            type: Sequelize.STRING(255),
            allowNull: false,
            unique: false
        },
        id: {
            type: Sequelize.STRING(255),
            allowNull: false,
            unique: true
        }
    }, {
        freezeTableName: true,
        paranoid: false,
        timestamps  : false,
        underscored : false,
        tableName: 'Activity_Plan',
        classMethods: {
            associate() {
                activity_plan.hasMany(sequelize.models.activity, {
                    as: 'activity_plan',
                    foreignKey: 'activity_plan_pk',
                    targetKey: 'activity_plan_pk'
                });
            }
        }
    });

    return activity_plan;
};
文件服务\mic\activity\u plan\hooks\index.js

'use strict';

const globalHooks = require('../../../../hooks');
const hooks = require('feathers-hooks');
const auth = require('feathers-authentication').hooks;

exports.before = {
    all: [],
    find: [
        getRelatedInfo()
    ],
    get: [
        getRelatedInfo()
    ],
    create: [],
    update: [],
    patch: [],
    remove: []
};

exports.after = {
    all: [],
    find: [],
    get: [],
    create: [],
    update: [],
    patch: [],
    remove: []
};


function getRelatedInfo() {
    return function (hook) {
        hook.params.sequelize = {
            attributes: [
                'activity_pk',
                'activity_plan_pk',
                'change_order_pk',
                ['description', 'activity_description'],
                ['id', 'activity_id']
            ],
            include: [
                {
                    model: hook.app.services.activity_plan.Model,
                    as: 'activity_plan',
                    required: false,
                    attributes: [
                        ['description', 'activity_plan_description'],
                        ['id', 'activity_plan_id']
                    ]
                }
            ]
        }
    };
    return Promise.resolve(hook);
}
'use strict';

const globalHooks = require('../../../../hooks');
const hooks = require('feathers-hooks');
const auth = require('feathers-authentication').hooks;

exports.before = {
    all: [],
    find: [],
    get: [],
    create: [],
    update: [],
    patch: [],
    remove: []
};

exports.after = {
    all: [],
    find: [],
    get: [],
    create: [],
    update: [],
    patch: [],
    remove: []
};
问题

我想在某个地方我有一个错误的配置。我使用了我自己的一个工作示例应用程序,其中服务没有子文件夹,并且关系也是以同样的方式建立的。这是有效的。知道问题在哪里吗

解决问题

好的。因此,我将activity和activity_Plan移回了服务的根目录,除了文件位置外,没有做任何更改。同样的错误。然后我更改了服务的路径(删除了“/mic”),现在我得到的“活动计划”与“活动”没有关联

好的,现在我恢复了我的测试,并有了这一行
model:hook.app.service('/mic/activity\u plan')。model
。然后我想到了一件事。我有自定义的主键,所以我需要在hasMany中做一些事情,包括查看这些部分

所以现在我制作了第二个数据库,它是通过sequelize(表)创建的,完全相同的问题


如果我在Model.validateIncludeElement(D:\Workspace\Projects\01.Live Customers\Mexon Technology\Projects-Mexon\Mexon InControl\Multifunctional Portal\backend\node\u modules\sequelize\lib\Model.js:558:11)查看这一行
然后在它指向的代码中,这很可能是我的模型命名与代码中的行
model:hook.app.service('/mfp/sys\u metadata').model
有关的问题。

哦,亲爱的。我完全忘记初始化服务子文件夹的index.js文件中的关联:

 Object.keys(sequelize.models).forEach(function(modelName) {
        if ("associate" in sequelize.models[modelName]) {
            sequelize.models[modelName].associate();
        }
    });

    sequelize.sync(
        {
            force: false
        }
    );