【问题标题】:Parse custom webhook: can I query my tables?解析自定义 webhook:我可以查询我的表吗?
【发布时间】:2015-01-13 22:11:20
【问题描述】:

在 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')”等都被调用,除了查询的第一次调用中的内容。

【问题讨论】:

    标签: javascript parse-platform webhooks pfquery


    【解决方案1】:

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

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

    更新

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

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

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

    contactQuery.first() 内部,您使用的是云代码不支持的 alert()

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

    【讨论】:

    • 我按照您的建议尝试了 first() ,但仍然没有调用它的成功/错误块。我正在使用parse.com/docs/js_guide#queries-constraints
    • 用您的网络钩子的完整代码块更新您的问题,我可以为您提供帮助。
    • 将 res.send('Success') 移动到我有 response.success() 工作的地方!我现在一切正常...谢谢!
    【解决方案2】:

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

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

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

    干杯 -A

    【讨论】:

    • 我进入解析并寻找这个类的安全限制......它们似乎都设置为公共
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 2021-08-04
    • 1970-01-01
    相关资源
    最近更新 更多