使用Node.js解析SDK JavaScript ENOTFOUND

Edw*_*yot 10 javascript json node.js express parse-platform

所以我想在Parse上获取大量数据,我发现一个很好的解决方案是创建一个递归函数:成功找到数据后,启动另一个请求.我这样做的方式非常简单:

var containedLimit = 1000, // Also tried with 500, 300, and 100
    parseUsersWaiting = {
        // A lot of Users
    },
    parseUsers = {}, // Recipt for Users
    getPlayers = function (containedIn) {        
        var count = 0;

        if (containedIn == undefined) {
            containedIn = [];

            for (var i in parseUsersWaiting) {
                count++;
                if (count > containedLimit) {
                    break;
                }

                containedIn.push(parseUsersWaiting[i].id);
                delete parseUsersWaiting[i];
            }
        }

        var UserObject = Parse.Object.extend('User'),
            UserQuery = new Parse.Query(UserObject);

        UserQuery.limit(containedLimit);

        UserQuery.containedIn('objectId', containedIn);
        UserQuery.find({
            success: function (results) {
                if (results) {
                    for (var i in results) {
                        if (parseUsers[results[i].id] == undefined) {
                            parseUsers[results[i].id] = results[i];
                        }

                        // Other stuff

                        if (results.length < containedLimit) {
                            // End of process
                        } else {
                            getPlayers();
                        }
                    }
                } else {
                    // Looks like an end of process too
                }
            }, error: function (error) {
                console.log(error.message);
                getPlayers(containedIn);
            }
        });
    };
Run Code Online (Sandbox Code Playgroud)

现在,我想称之为"问题":非常频繁地发生"错误"回调与此一起启动:

Received an error with invalid JSON from Parse: Error: getaddrinfo ENOTFOUND api.parse.com
at errnoException (dns.js:44:10)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:94:26)
Run Code Online (Sandbox Code Playgroud)

(当然,使用代码107)所以我搜索了Parse文档,它说的完全相同:"收到了无效JSON的错误".是啊.

我正在使用Parse.com提供的Parse SDK(npm install parse)

我还尝试修改Parse代码host,在文件的第361行parse/node_modules/xmlhttprequest/lib/XMLHttpRequest.js(Parse包版本:1.5.0)上用'hostname' 替换密钥,但它没有用,所以我删除了我的更改.

(顺便说一句,我找到了一个解决方案,谈论使用ulimit改变内存使用限制,可以解决问题,但实际上,我没有执行此命令的必要权限)

smr*_*mde 4

当它无法连接到 API 时(从技术上讲,当它无法查找 API 服务器的 IP 地址时),就会发生此错误。也许您的互联网连接短暂中断,或者他们的 SDK 服务器不可用(或者服务器可能由于速率限制而拒绝您的请求)。

无论哪种方式,最好在您的应用程序中编写一些弹性代码。我看到您的错误函数重试 API 调用,但也许值得在执行此操作之前添加超时,以使问题有机会恢复?

    error: function (error) {
        console.log(error.message);
        setTimeout(getPlayers, 10000, containedIn);
    }
Run Code Online (Sandbox Code Playgroud)

如果服务器限制您的请求速率,这也会有所帮助。