解析自定义webhook:我可以查询我的表吗?

时间:2015-01-13 22:11:20

标签: javascript parse-platform webhooks pfquery

在Parse自定义webhook中,其格式为:

app.post('/receiveSMS', function(req, res) {

其中receiveSMS连接到Twilio api并正确调用此方法(我有日志来证明它),但我试图在这个方法中查询我的表,它似乎没有工作。

这是允许的,还是我需要做些什么特别的工作?

var contactObj = Parse.Object.extend("Contact");
var contactQuery = new Parse.Query(contactObj);
console.log(req.body.From);

contactQuery.each(function(contact) {

并且每个调用的主体永远不会被调用。 这是允许的,如果允许的话,我在这里做错了什么?

更新 - 整个webhook代码块是:

app.post('/receiveSMS', function(req, res) {
console.log('receive SMS');
console.log(req.body.Body);

res.send('Success');
if(req.body.Body.toLowerCase() == "in" || req.body.Body.toLowerCase() == "out") {
    twilio.sendSMS({
        From: "(xxx) xxx-xxxx",
        To: req.body.From,
        Body: "It's been noted, and notifications have been sent. Check us out!"
    }, {
        success: function(httpResponse) {
            console.log(httpResponse);
            response.success("SMS Sent!");
        }, 
        error: function(httpResponse) {
            console.error(httpResponse);
            response.error("Uh OH, something went wrong");
        }
    });

    if(req.body.Body.toLowerCase() == "in") {
        console.log("in was received");
        // eventQuery
        var contactObj = Parse.Object.extend("Contact");
        var contactQuery = new Parse.Query(contactObj);
        console.log(req.body.From);

        // contactQuery.equalTo("phone", req.body.From);
        contactQuery.first({
            success: function(contact) {
                console.log("found contact");
                console.log(contact);
            }, error: function(error) {
                alert("Error: " + error.code + " " + error.message);
            }
        });
    }
}
});

调用此代码并调用日志“console.log('接收SMS')”等等,但查询的第一次调用内部除外。

2 个答案:

答案 0 :(得分:1)

对表格的查询很好,但是您不能使用each()函数,因为它仅限于在后台作业中工作。

根据您的需要,您必须使用find()first()get()

更新

好的,看到你的完整代码后,我有一些想法,为什么它不起作用。首先,在您完成之前发送res.send("Success");,我不是肯定的,但我认为这导致它停止运行您的其余代码(尚未检查,可能是错的。)

此外,您还在进行多项异步操作而不对其进行链接,以便contactQuery.first()twilio.sendSMS()完成之前运行。

在twilio.sendSMS()内,您正在调用response.success() / response.error()。这些是云方法,而不是Web钩子,所以我希望这些会在服务器端抛出错误(检查仪表板上的日志)。

contactQuery.first()内,您使用的是alert(),云代码不支持此功能。

我不确定这些错误是否会提前发现并抛出错误,或者是否会引发运行时异常,但是应该修复它们,重新部署代码并重试。然后报告服务器日志中的任何错误。

答案 1 :(得分:0)

是的,这是允许的,我使用相同的网络钩子。

我的猜测是你可能已经在Contact类上定义了安全限制,阻止查询获取任何内容。这个课程的安全设置是什么?

您可以尝试放松约束,或以虚拟用户身份登录,然后执行查询(我选择的方法)。

欢呼声 -A