如何使用 Sails JS 更新模型
How to update a model with Sails JS
好的,我的一个控制器中有以下内容:
User.find({email: 'email@example.com'}).then(function (user) {
user[0].field = 'new_value';
user[0].field_2 = 'new_value';
console.log(user[0], 'before saving');
user[0].save();
console.log(user[0], 'after saving');
});
如果我在这个阶段控制 user[0]
,我可以看到更新的字段。但是,更改未保存到数据库中。如果我执行以下操作:
User.find({email: 'email@example.com'}).then(function (user) {
user[0].field = 'new_value';
user[0].field_2 = 'new_value';
user[0].save();
User.find(user[0].id).then(function (updateduser) {
console.log(updateduser[0])
});
});
updateduser
没有更新的字段...这是为什么?在这种情况下我应该如何处理?
为什么不使用 updated()
方法?
User.find({ email: 'email@example.com' })
.then(function(user) {
if (!user) return res.notFound();
User.update({ eamil: 'eamil@example.com' }, {
field: 'new_value',
field_2: 'new_value'
})
.then(function(updated_user) {
console.log(updated_user);
return res.ok();
})
.catch(function(err) {
sails.log.error(err);
return res.serverError();
});
})
.catch(function(err) {
sails.log.error(err);
return res.serverError();
});
实际上
user[0].save();
将 return 像您为 User.find().then();
所做的那样做出承诺
user[0].save() 是异步调用,因此下一次查找用户的调用将 运行 即使数据库中未更新 user[0]。
因此将第二个查找命令放在 save() 函数的 then 中,您将获得更新后的用户。
user[0].save().then(function(err){
User.find(user[0].id).then(function (updateduser) {
console.log(updateduser[0])
});
}))
首先,您只想更新一个用户数据,因为您正在使用用户[0](我认为)。
所以使用findOne()很容易。
简单代码
User
.findOne({email: 'email@example.com'})
.exec(function(err,user){
if(err || !user) {
//handle here
}
else {
user.key1 = 'new_value';
user.key2 = 'new_value';
user.save(function(err){
if(err){
//handle error
}
console.log('updatedUser',user)
})
}
})
谢谢。
好的,我的一个控制器中有以下内容:
User.find({email: 'email@example.com'}).then(function (user) {
user[0].field = 'new_value';
user[0].field_2 = 'new_value';
console.log(user[0], 'before saving');
user[0].save();
console.log(user[0], 'after saving');
});
如果我在这个阶段控制 user[0]
,我可以看到更新的字段。但是,更改未保存到数据库中。如果我执行以下操作:
User.find({email: 'email@example.com'}).then(function (user) {
user[0].field = 'new_value';
user[0].field_2 = 'new_value';
user[0].save();
User.find(user[0].id).then(function (updateduser) {
console.log(updateduser[0])
});
});
updateduser
没有更新的字段...这是为什么?在这种情况下我应该如何处理?
为什么不使用 updated()
方法?
User.find({ email: 'email@example.com' })
.then(function(user) {
if (!user) return res.notFound();
User.update({ eamil: 'eamil@example.com' }, {
field: 'new_value',
field_2: 'new_value'
})
.then(function(updated_user) {
console.log(updated_user);
return res.ok();
})
.catch(function(err) {
sails.log.error(err);
return res.serverError();
});
})
.catch(function(err) {
sails.log.error(err);
return res.serverError();
});
实际上
user[0].save();
将 return 像您为 User.find().then();
所做的那样做出承诺user[0].save() 是异步调用,因此下一次查找用户的调用将 运行 即使数据库中未更新 user[0]。
因此将第二个查找命令放在 save() 函数的 then 中,您将获得更新后的用户。
user[0].save().then(function(err){
User.find(user[0].id).then(function (updateduser) {
console.log(updateduser[0])
});
}))
首先,您只想更新一个用户数据,因为您正在使用用户[0](我认为)。
所以使用findOne()很容易。
简单代码
User
.findOne({email: 'email@example.com'})
.exec(function(err,user){
if(err || !user) {
//handle here
}
else {
user.key1 = 'new_value';
user.key2 = 'new_value';
user.save(function(err){
if(err){
//handle error
}
console.log('updatedUser',user)
})
}
})
谢谢。