Parse platform 从自定义web钩子调用Parse.Cloud.beforeSave()

Parse platform 从自定义web钩子调用Parse.Cloud.beforeSave(),parse-platform,Parse Platform,我开始克隆云代码示例博客应用程序。在控制器中,我有基本的REST crud操作。我尝试将代码添加到我的控制器中,也尝试直接添加到main.js中: Parse.Cloud.beforeSave(Parse.User, function(req, res) { for (var dirtyKey in req.object.dirtyKeys()) { if (dirtyKey === "username" || dirtyKey === "email") { res.er

我开始克隆云代码示例博客应用程序。在控制器中,我有基本的REST crud操作。我尝试将代码添加到我的控制器中,也尝试直接添加到main.js中:

Parse.Cloud.beforeSave(Parse.User, function(req, res)
{
  for (var dirtyKey in req.object.dirtyKeys()) {
    if (dirtyKey === "username" || dirtyKey === "email") {
      res.error("User is not allowed to modify " + dirtyKey);
      return;
    }
  }
  res.success();
})
在我的终端中,我正在运行
parse develope[app]
以在更改时更新文件。当我添加上面的代码时,它确实注册了一个触发器

Deploying recent changes...
Your changes are now live.
I2014-07-15T03:30:18.108Z]Deployed v63 with triggers:
  _User:
    before_save
然而,我仍然能够通过使用postman的RESTAPI更新用户名和电子邮件字段


我想,真正的问题应该是,如果我像这样构建我的应用程序;我是否仍像前面描述的那样使用这些beforeSave()触发器?还是在方法(在本例中,是我创建的User.update方法)中进行检查并验证那里的所有内容更好?因为我似乎无法让触发器实际运行。

这个问题是一个常见的错误,
for..in
在带有数组的JavaScript中工作,在上面的代码中,
dirtyKey
将填充索引,而您需要的是:

for (var i in req.object.dirtyKeys()) {
  var dirtyKey = req.object.dirtyKeys()[i];
  if (dirtyKey === "username" || dirtyKey === "email") {
    res.error("User is not allowed to modify " + dirtyKey);
    return;
  }
}

把它改成…在循环中确实奏效了。但当它放置在控制器中时仍然不会触发。有没有更好的方法可以把它放在某个地方,这样它的main.js/app.js文件就不会被所有的触发器弄乱?我希望在控制器中有一种方法可以做到这一点。所以看起来解析本身有错误?!他们的文档是不正确的,这绝对是一个遗憾。