解析自定义 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()
。
我不确定这些错误是否会被及早发现并抛出错误,或者它们是否会引发 运行 时间异常,但它们应该被修复,您的代码会重新部署并重试。然后报告服务器日志中的任何错误。
在 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()
。
我不确定这些错误是否会被及早发现并抛出错误,或者它们是否会引发 运行 时间异常,但它们应该被修复,您的代码会重新部署并重试。然后报告服务器日志中的任何错误。