javascript - 使用 Node.js 解析 SDK JavaScript ENOTFOUND

标签 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);
            }
        });
    };

现在,这就是我想称之为“问题”的地方:经常发生的情况是,“错误”回调是通过以下方式启动的:

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)

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

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

我还尝试通过在文件 parse/node_modules/xmlhttprequest/lib/XMLHttpRequest.js(解析包版本:1.5.0),但它不起作用,所以我删除了我的更改。

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

最佳答案

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

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

    error: function (error) {
        console.log(error.message);
        setTimeout(getPlayers, 10000, containedIn);
    }

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

关于javascript - 使用 Node.js 解析 SDK JavaScript ENOTFOUND,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32070616/

相关文章:

json - 记录 JSON 结构的语法

javascript - 如何在 HTML 页面上显示 JSON 文件

javascript - 使用 Socket.IO 时如何访问 session 标识符?

node.js - MongoDB Gridfs NODE 显示图像

java - 如何从该字符串创建 JSONArray?

javascript - nodejs使用gm模块来处理图像,但我需要它同步

javascript - 使用 Web 动画动画 DOM 属性 (scrollTop)

javascript - 调整浏览器大小时 html 组件的比例大小

javascript - 终端错误: TypeError: Cannot destructure property 'interface' of 'require(...)' as it is undefined

javascript - ExternalInterface 调用使浏览器崩溃