Sequelize не возвращает объект, а вместо этого дополнительные данные - PullRequest
0 голосов
/ 18 марта 2020

Когда я запускаю любую функцию поиска с помощью sequelize, я ожидаю получить объект данных, которые пытаюсь получить, вместо этого я получаю кучу дополнительных данных обратно. Это то, что я получаю при печати результат того, что дал мне sequelize

Это код, который я запускаю:

getAllHubsByUser: function(userId, callback){
        db.User.findByPk(userId)
            .then(function(user) {
                user.getSubscriptions()
                    .then(function(hubs){
                        dataValuesHubs = []
                        for (hub in hubs) {
                            dataValuesMembers.push(hub.dataValues)
                        }
                        callback(dataValuesHubs, null)
                    })
                    .catch(function(error){
                        callback(null, error)
                    })
            })
            .catch(function(error) {
                callback(null, error)
            })
    },

У меня есть отношение многие ко многим между таблицей под названием Hubs и Users, многие пользователи могут быть подписался на множество хабов. Отношения выглядят так:

User.belongsToMany(Hub, {as: "Subscriptions", through: 'hubSubscriptions', foreignKey: 'userId'})
Hub.belongsToMany(User, {as: "Subscribers", through: 'hubSubscriptions', foreignKey: 'hubId'})

Поскольку sequelize не возвращает объект, я получаю сообщение об ошибке, когда вы запускаете user.getSubscription (): «Необработанное отклонение TypeError: Невозможно прочитать свойство 'findAll' из неопределенного "

Как я могу сделать так, чтобы sequelize отправлял обратно объект?

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Как сказал @Anatoly, вы получаете объект Sequelize. Model со всеми его опорами и методами, инициированными внутри него. Чтобы получить простой javascript объект, вы можете использовать следующую имплентацию

getUserByEmail: function(email, callback) {
        db.User.findOne({
            where: {email: email},
            raw: true // Get the raw object.
        })
            .then(function(user){
                console.log(user)
                if (user) {
                    callback(user.dataValues, null)
                } else {
                    callback(null, null)
                }
            })
            .catch(function(error){
                console.log(error)
                callback(null, error)
            })
}

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

0 голосов
/ 18 марта 2020

Вы только что получили экземпляр объекта модели Sequelize с его собственными дополнительными опорами и методами. Чтобы получить простой объект, сделайте это:

const plainUser = user.get({ plain: true })
console.log(plainUser)
...