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

Parse custom webhook: can I query my tables?

在 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('receive SMS')"之类的都被调用,除了查询的第一次调用里面的内容。

是的,这是允许的,我正在使用相同的网络挂钩。

我的猜测是,您可能已经在联系人 class 上定义了安全限制,以防止查询获取任何内容。此 class 的安全设置是什么?

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

干杯 -A

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

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

更新

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

此外,您正在执行多个异步操作而不链接它们,因此 contactQuery.first() 将在 twilio.sendSMS() 完成之前 运行。

在 twilio.sendSMS() 中,您正在调用 response.success() / response.error()。这些用于云方法,而不是网络挂钩,所以我预计这些会在服务器端抛出错误(检查仪表板上的日志)。

contactQuery.first() 中,您正在使用云代码不支持的 alert()

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