Sequelize 不返回对象而是返回额外的数据
2020-03-18
1446
当我使用 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.getSubscriptions() 时出现错误: “未处理的拒绝 TypeError:无法读取未定义的属性‘findAll’”
如何让 sequelize 返回一个对象?
2个回答
您刚刚获得了一个具有自己的附加道具和方法的 sequelize 模型对象实例。 要获取普通对象,请执行以下操作:
const plainUser = user.get({ plain: true })
console.log(plainUser)
Anatoly
2020-03-18
正如 @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)
})
}
如果您希望所有查询都默认返回纯对象,请查看此 答案 。
Ratul Sharker
2020-03-18