Связь между пользователями и базой данных Sequelize криптоданных - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь построить отношения между пользователем и его любимой криптовалютой.

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

Монета. js

module.exports = (sequelize, DataTypes) => {
    const Coin = sequelize.define('Coin', {
        cryptoName: DataTypes.STRING,
    })

    Coin.associate = function(models) {
     Coin.belongsToMany(models.CoinsUserRelations, {foreignKey: 'CoinID', through: 'CoinsUserRelations'})
    }

return Coin

}

Пользователь. js

module.exports = (sequelize, DataTypes) => {
    const User = sequelize.define('User', {
        firstName: DataTypes.STRING,
        lastName: DataTypes.STRING,
        email: {
           type: DataTypes.STRING,
           unique: true
        },
        password: DataTypes.STRING
        }, {
          hooks: {
           beforeSave: hashPassword
          }
     })

     User.associate = function(models) {
      User.belongsToMany(models.CoinsUserRelations, {foreignKey: 'UserID', through: 'CoinsUserRelations'})
     } 
     return User
  }

На данный момент это мои 2 таблицы, и теперь я пытаюсь установить связь между ними. и я продолжаю получать эту ошибку на своей консоли, но я не понимаю почему.

Я редактировал несколько раз, чтобы решить эту проблему. Это был результат с помощью Анатолия

CoinsUserRelations. js

module.exports = (sequelize, DataTypes) => {
    const CoinsUsersRelations = sequelize.define('CoinsUsersRelations', {
        UserID: {
            type: DataTypes.INTEGER,
        },
        CoinID: {
            type: DataTypes.INTEGER,
        }
    })

    return CoinsUsersRelations
  }

Я действительно не уверен, почему я получаю эту ошибку, если я действительно определяю модель перед созданием отношений ..

Индекс. js

const fs = require('fs')
const path = require('path')
const Sequelize = require('sequelize')
const config = require('../config/config')
const db = {}

const sequelize = new Sequelize(
    config.db.database,
    config.db.user,
    config.db.password,
    config.db.options
)

fs
    .readdirSync(__dirname)
    .filter((file) => 
        file !== 'index.js'
    )
    .forEach((file) => {
        const model = sequelize.import(path.join(__dirname, file))
        db[model.name] = model
    })
Object.keys(db).forEach(function (modelName) {
  if (db[modelName].associate) {
    db[modelName].associate(db)
  }
})

db.sequelize = sequelize
db.Sequelize = Sequelize

module.exports = db

Отредактируйте часть для ошибки с именем SequelizeEagerLoadingError

module.exports = {
    async getUserFavoriteCrypto (req, res) {
        try {
            const coins = await db.Users.findOne({
                where: {
                    UserID : req.query.userId
                },
                attributes: ['UserID'],
                include: [{
                    model: db.Coins,
                    required: false
                }]
            })
            console.log(coins)
            res.send({
                coins: coins
            })
        } catch (err) {
            res.status(400).send({
                error: err
            })
        } 
    }
}

1 Ответ

1 голос
/ 28 мая 2020

Вам необходимо зарегистрировать все модели и только после этого все их ассоциации в одном месте. См. Мой ответ на аналогичную проблему

...