Parse platform 分析CloudCode无效的地质点对象
我正在解析云代码中使用JavaScript SDK,试图编写一个从地理点过滤的查询。我不断得到错误:Parse platform 分析CloudCode无效的地质点对象,parse-platform,Parse Platform,我正在解析云代码中使用JavaScript SDK,试图编写一个从地理点过滤的查询。我不断得到错误: {"code":141,"error":" Error: 102 $nearSphere: invalid geopoint object"} 我的代码如下所示: Parse.Cloud.define("findPeopleNearby", function (request, response) { Parse.Cloud.useMasterKey(); if (request.params
{"code":141,"error":" Error: 102 $nearSphere: invalid geopoint object"}
我的代码如下所示:
Parse.Cloud.define("findPeopleNearby", function (request, response) {
Parse.Cloud.useMasterKey();
if (request.params.latitude && request.params.longitude) {
var point = new Parse.GeoPoint({ latitude: request.params.latitude, longitude: request.params.longitude });
console.log('would query off of GeoPoint: ' + JSON.stringify(point));
var places = Parse.Object.extend("UserLocation");
var placesQuery = new Parse.Query(places);
placesQuery.near("location", point);
placesQuery.find({
success: function (results)
{
console.log("Successfully retrieved " + results.length + " rows.");
response.success();
},
error: function (error)
{
response.error("Error: " + error.code + " " + error.message);
}
});
}});
我知道表中的数据没有问题,因为我可以成功地发出curl命令:
curl -X GET -H "X-Parse-Application-Id: xxxx" -H "X-Parse-REST-API-Key: yyyy" -G --data-urlencode 'limit=5' --data-urlencode 'where={ "location": { "$nearSphere": { "__type": "GeoPoint", "latitude": 37.33521504 , "longitude": -122.03254905 }, "$maxDistanceInMiles":10.0 } }' https://api.parse.com/1/classes/UserLocation
我最初在安装表上有location属性(我更喜欢它),但我看到并认为我会在它自己的对象中尝试它,但这似乎没有什么区别
另一方面,如果我可以让这个查询工作,我的下一个尝试将是使用父指针连接安装对象。如果我能理解是什么导致了这个错误,我希望/假设这会起作用
谢谢
编辑控制台输出
would query off of GeoPoint: {"__type":"GeoPoint","latitude":"37.33521504","longitude":"-122.03254905"}
蒂莫西的怀疑是正确的。输入是字符串而不是浮点数。转换输入可以解决错误,事实上,查询“连接”安装对象也可以正常工作。这是一个愚蠢的错误,但希望现在谷歌上的任何人都能找到一个结果,为他们指明正确的方向 供参考的长版本:
var lat, lng;
if (typeof request.params.latitude === "number") {
lat = request.params.latitude;
}
else {
lat = parseFloat(request.params.latitude);
// this could return NaN
}
if (typeof request.params.longitude === "number") {
lng = request.params.longitude;
}
else {
lng = parseFloat(request.params.longitude);
}
var point = new Parse.GeoPoint({ latitude: lat, longitude: lng });
控制台日志如何查找点?我猜lat/long不是数字,因此Parse.GeoPoint无效,确实需要查看第一个
控制台的输出。点的log
。arrrgh,我打赌就是这样。今晚我试试看。更新问题。非常感谢。@Fosco我可以建议Parse.GeoPoint
构造函数在下一个版本中不是数字时尝试对输入执行parseFloat()
?