我开始克隆云代码示例博客应用。在控制器中,我有基本的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 develop [app]
以便在我更改时更新文件。当我添加上面的代码时,它会注册一个触发器。
Deploying recent changes...
Your changes are now live.
I2014-07-15T03:30:18.108Z]Deployed v63 with triggers:
_User:
before_save
然而,我仍然可以使用邮递员的其他api来更新用户名和电子邮件字段。
我想,真正的问题应该是,如果我正在构建这样的应用程序;我仍然使用这些之前描述的beforeSave()触发器吗?或者,在方法中简单地进行这些检查(在这种情况下,我创建的User.update方法)并验证那里的所有内容是否更好?因为我似乎无法让触发器实际运行。
答案 0 :(得分:2)
这个问题是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;
}
}