在beforeSave钩子中,我希望在更新之前获得对象的状态。在这种情况下,它是阻止用户改变他们的选择,一旦他们做了。伪代码看起来类似于:
If (user has already voted) {
deny;
} else {
accept;
}到目前为止,我的代码是:
Parse.Cloud.beforeSave('votes', function(request, response) {
if (!request.object.isNew()) {
// This is an update. See if the user already voted
if (request.object.get('choice') !== null) {
response.error('Not allowed to change your choice once submitted');
}
}
response.success();
}但是request.object是已经应用了更新的对象的状态。
请注意,“选票”对象是单独创建的,因此这不允许插入,但不允许更新;我需要知道数据库中是否已经设置了给定的字段。
发布于 2014-08-01 14:44:24
request变量是更新的行本身。您可以通过request.object.id获取它的对象id,并使用它从数据库获取当前行并检查当前值,如下所示:
Parse.Cloud.beforeSave('votes', function(request, response) {
if (!request.object.isNew()) {
var query = new Parse.Query("votes");
query.get(request.object.id, { // Gets row you're trying to update
success: function(row) {
if (row.get('choice') !== null)
response.error('Not allowed to change your choice once submitted');
response.success(); // Only after we check for error do we call success
},
error: function(row, error) {
response.error(error.message);
}
});
}发布于 2014-09-30 15:38:18
虽然Krodmannix的响应是正确的(并且对我很有帮助),但它有一个完整查询的开销。如果您正在使用beforeSave进行操作,那么您确实希望简化它们。因此,我认为使用fetch命令要好得多。
Parse.Cloud.beforeSave('votes', function(request, response) {
if (!request.object.isNew()) {
var Votes = Parse.Object.extend("votes");
var oldVote = new Votes();
oldVote.set("objectId",request.object.id);
oldVote.fetch({
success: function(oldVote) {
if (oldVote('choice') !== null) {
response.error('Not allowed to change your choice once submitted');
}
else {
response.success(); // Only after we check for error do we call success
}
},
error: function(oldVote, error) {
response.error(error.message);
}
});
});发布于 2017-04-05 23:51:07
如果使用的是自托管的Parse Server,则在请求时有一个称为“原始”的属性,即更改前的对象。
Parse.Cloud.beforeSave("Post", function(request, response) {
console.log(request.object); //contains changes
console.log(request.original); //contains original
response.success();
});https://stackoverflow.com/questions/25082262
复制相似问题