gpt4 book ai didi

mysql - Sequelize findOrCreate 不排除排除数组中定义的属性

转载 作者:太空宇宙 更新时间:2023-11-03 11:40:27 25 4
gpt4 key购买 nike

代码如下:

Accounts.findOrCreate({
where: {
userName: request.payload.userName
},
attributes: { exclude: ['password','sessionToken'] },
defaults: request.payload
}).spread(function (account, created) {

if (created) {
var account = account.get({
plain: true
});

console.log(account); // has the password and sessionToken fields

return reply(account).code(201);
} else {
return reply("user name already exists").code(422);
}

});

我注意到 sequelize 首先触发一个密码字段不存在的选择查询,然后它触发一个插入语句,其中密码字段存在,并且需要存在。

我只是希望密码和 sessionToken 不出现在生成的帐户对象中。我当然可以从对象中删除这些属性,但我正在寻找一种更直接的方法。

最佳答案

看来您需要手动删除这些字段。根据源代码,findOrCreate 方法首先触发 findOne 函数,如果未找到实例,则执行 createcreate 方法不接受 attributes 参数。在这种情况下,将返回所有字段。

好的解决方案是在 Accounts 模型中创建实例方法,以便返回仅具有所需属性的实例。

{
instanceMethods: {
toJson: function() {
let account = {
id: this.get('id'),
userName: this.get('userName')
// and other fields you want to include
};

return account;
}
}
}

然后您可以在返回对象的原始表示时简单地使用 toJson 方法:

Accounts.findOrCreate({ where: { userName: 'username' } }).spread((account, created) => {
return account ? account.toJson() : null;
});

关于mysql - Sequelize findOrCreate 不排除排除数组中定义的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42187020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com