Разделить ассоциации: не могу добавить ассоциации, выдает TypeError - PullRequest
0 голосов
/ 27 мая 2018

Я новичок в postgres и Sequelize.Я пришел из NoSQL, поэтому это немного утомительно для меня.

Прежде всего, это каталог моего проекта:

server/
    components/
        center/
            center.model.js
            center.controller.js
            center.routes.js

Итак, я следую архитектуре на основе модулей.

Вот мой center.models.js:

const Sequelize = require('sequelize');

const sequelize = require('../../config/sequelize');

const Inventory = require('../inventory/inventory.model');

const Center = sequelize.define('center', {
    name: {
        type: Sequelize.TEXT,
        allowNull: false,
        validate: {
            notEmpty: true,
        },
    },
    zone: {
        type: Sequelize.TEXT,
        allowNull: false,
        validate: {
            notEmpty: true,
        },
    },
    lat: {
        type: Sequelize.DOUBLE,
    },
    long: {
        type: Sequelize.DOUBLE,
    },
    nearest_metro: {
        type: Sequelize.TEXT,
    },
    metro_distance: {
        type: Sequelize.DOUBLE,
    },
    address: {
        type: Sequelize.TEXT,
    },
    google_map: {
        type: Sequelize.TEXT,
    },
    landmark: {
        type: Sequelize.TEXT,
    },
    landmark_directions: {
        type: Sequelize.TEXT,
    },
    active: {
        type: Sequelize.BOOLEAN,
        defaultValue: true,
    },
    created_at: {
        type: Sequelize.DATE,
        defaultValue: Sequelize.NOW
    },
    updated_at: {
        type: Sequelize.DATE,
        defaultValue: Sequelize.NOW
    }
});

Center.hasMany(Inventory);

module.exports = Center;

А это моя SpacePartner модель:

const Sequelize = require('sequelize');

const sequelize = require('../../config/sequelize.js');

const Center = require('../center/center.model.js');

const SpacePartner = sequelize.define('space_partner', {
    name: {
        type: Sequelize.TEXT,
        allowNull: false,
        validate: {
            notEmpty: true,
        },
    },
    active: {
        type: Sequelize.BOOLEAN,
        defaultValue: true,
    },
    created_at: {
        type: Sequelize.DATE,
        defaultValue: Sequelize.NOW
    },
    updated_at: {
        type: Sequelize.DATE,
        defaultValue: Sequelize.NOW
    }
});

SpacePartner.hasMany(Center);

module.exports = SpacePartner;

И вот как я использую две модели в моемspace_partner.controller.js:

    const CreateSpacePartner = async (req, res) => {
    try {
        const {
            spacePartner,
            center,
            inventory,
        } = req.body;

        const [createdSP, createdCenter, createdInventory] = await Promise.all([SpacePartner.create(spacePartner), Center.create(center), Inventory.create(inventory)]);

        createdCenter.addSpacePartner(createdSP);

        createdInventory.addCenter(createdCenter);

        createdInventory.addInventoryType(inventory.inventory_type_id);

        const [updatedCenter, updatedInventory] = await Promise.all([createdCenter.save({
            fields: ['space_partner_id']
        }), createdInventory.save({
            fields: ['center_id', 'inventory_type_id']
        })]);

        return res.status(200).json({
            spacePartner: createdSP,
            center: updatedCenter,
            inventory: updatedInventory,
        });
    } catch (e) {
        console.log(e);
        return res.status(500).json({
            message: 'Sorry, we are facing some issue right now. Please, try again later.',
        });
    }
};

Теперь проблема в том, что я получаю TypeError на addSpacePartner addCenter и addInventoryType.

Я следовал официальным документам.

Я прошел другие уроки, но в них было больше архитектуры MVC, я не хочу возвращаться к реструктуризации своего кода.

Любая помощь будет очень полезной.

1 Ответ

0 голосов
/ 28 мая 2018

Чтобы это работало createdCenter.addSpacePartner(createdSP);, чтобы мы работали, нам нужно определить отношения между Center и SpacePartner.Таким образом, это должно быть

Center.hasMany(SpacePartners)

После того, как вы это сделаете, эти функции должны быть доступны для вас.

Вы можете узнать больше об ассоциации здесь

Код для Inventory не опубликован, поэтому сложно сказать об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...