使用Node.js ENOTFOUNDparsingSDK JavaScript

所以我想在Parse上获取大量的数据,我发现一个很好的解决方法就是做一个recursion函数:当数据成功find时,启动另一个请求。 我这样做的方式非常简单:

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

现在,我想把这个问题称为“问题”:它经常发生“错误”callback:

 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)所以我search了Parse文档,它说的是完全一样的东西:“收到错误,无效的JSON”。 是啊。

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

我也尝试修改一点parsing代码,用文件parse/node_modules/xmlhttprequest/lib/XMLHttpRequest.js (parsing包版本:1.5.0)的行361上的'hostname'replacehost密钥,工作,所以我删除了我的变化。

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

当它无法连接到API(技术上无法查找API服务器的IP地址)时,会发生此错误。 也许你的networking连接在短时间内丢失了,或者他们的SDK服务器不可用(或者由于速率限制服务器拒绝你的请求)。

无论哪种方式,编写一些弹性到您的应用程序是很好的。 我看到你的错误函数重试API调用,但也许值得添加一个超时之前,你要这样做的问题有机会恢复?

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

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