在保存超时前解析云代码



添加电子邮件地址到列表时,如果地址属于现有用户,我想在我的云代码中检查beforeSave函数。如果没有,我想停止保存调用,并返回一个错误响应到我的移动应用程序。

当我运行下面的代码时,我在输入有效的电子邮件地址时没有问题。然而,只要我输入一个无效的地址,beforeSave函数就会进入一个混乱状态,并在一段时间后超时,向客户端返回一堆垃圾。

Parse.Cloud.beforeSave("EventUsers", function(request, response) {
    var email = request.object.get("email");
    console.log("starting beforeSave for user: " + email);
    Parse.Cloud.useMasterKey();
    var userQuery = new Parse.Query(Parse.User);
    userQuery.equalTo("email", email);
    userQuery.first().then(function(user) {
        console.log("user: " + user.get("email"));
        if (user) {
            console.log("User exists");
            response.success();
        }
        console.error("No user with that email");
        response.error("199");
    }, function(error) {
        console.error(error);
        response.error("198");
    });
});

当我用一个无效的电子邮件地址运行这个时,我只得到第一个console.log调用报告给我的控制台-其他的都没有显示。

我在Heroku上运行解析服务器

你是在parse.com上运行这个还是在你自己的mongodb后端?

在任何情况下,你的问题是电子邮件可能没有索引,所以它正在做一个全表扫描。如果是您自己的后端,您可以在集合中为电子邮件添加索引。

如果你正在运行自己的数据库,不确定是否有人已经这样做了(我还没有,但应该),但你也可以在电子邮件上设置一个唯一的约束,然后你可以简单地在user.save()上捕获被拒绝的承诺,而不用担心beforeave钩子。

相关内容

  • 没有找到相关文章

最新更新