Parse platform 分析CloudCode无效的地质点对象

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

我正在解析云代码中使用JavaScript SDK,试图编写一个从地理点过滤的查询。我不断得到错误:

{"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()