2016-02-12 74 views
5

根据Parse博客上的迁移指南,我已将我的Parse应用程序迁移到Heroku。事情似乎很好,除了在我的云代码中运行查询。这里是我的代码:解析云代码中的查询在迁移到Heroku后无法工作

Parse.Cloud.afterSave("Item", function(request) { 
    //Parse.Cloud.useMasterKey(); //Uncomenting this line yields the same error 

    var query = new Parse.Query(Parse.User); 
    var prevAssigneeId = request.object.get("prevAssignee").id; 
    var assigneeId = request.object.get("assignee").id; 

    query.get(prevAssigneeId, { // <-- Results in an error 
     success: function(prevAssignee) { 
      console.log("Fetch prevAssignee: Success"); 
      query.get(assigneeId, { 
       success: function(assignee) { 
        console.log("Fetch assignee: Success"); 

        // Do something with the fetched users! 
       }, 
       error: function(object, error) { 
        console.log("Query for assignee: "); 
        console.log(error); 
       } 
      }); 
     }, 
     error: function(object, error) { 
      console.log("Query for prevAssignee: "); 
      console.log(error); //<-- Error is logged here 
     } 
    }); 
}); 

错误用于运行罚款解析托管时

ParseError { code: undefined, message: 'unauthorized' }

这种云代码。但迁移后,我得到了上述错误。其他不使用ParseQuery的云代码仍然可以正常工作。

关于这个问题可能有什么想法?

UPDATE

仍然没能找到这个修复,所以我尝试的代码更改为以下:

Parse.Cloud.afterSave("Item", function(request) { 

    console.log("Executing afterSave"); 

    function findUser(user_id) { 
     var query = new Parse.Query(Parse.User); 
     //Parse.Cloud.userMasterKey(); 
     return query.get(user_id); 
    } 

    var prevAssigneePromise = findUser(request.object.get("prevAssignee").id); 
    var assigneePromise = findUser(request.object.get("assignee").id); 

    var promises = [prevAssigneePromise, assigneePromise]; 

    Parse.Promise.when(promises).then(function(prevAssignee, assignee) { 

     //Do something here! 
     console.log("This line was executed!"); 

    }, 
    function(error) { 
     console.log(error); 
    }); 
}); 

现在我注意到以下行为:

  • 按原样运行,它会产生相同的错误:[ ParseError { code: undefined, message: 'unauthorized' }, ParseError { code: undefined, message: 'unauthorized' } ]
  • 如果我不合作没有错误,但不会在成功块中执行任何操作,即记录“此行已执行!”。我可以确认记录本身正在工作,因为其他console.log(...)声明工作。

仅供参考:Item是一个Parse类列assigneeprevAssignee被列是指向_User秒。

任何帮助,非常感谢。

+0

您需要使用 query.get(prevAssigneeId,{ useMasterKey:真实, 成功:函数(prevAssignee){ – jiawen

+0

@jiawen这没有工作,我尝试了不同的方法,这也没” t工作(看我更新的代码)。任何想法? – janakagamini

回答

1
query.get(prevAssigneeId, { 
    useMasterKey: true 
    success: function(prevAssignee) { 
     console.log("Fetch prevAssignee: Success"); 

    } 
} 
+0

没有工作,同样的错误:( – janakagamini

+0

我也在使用主密钥的所有查询中出现错误,但错误对象未定义。 –