困惑为什么我在Node.js中遇到此错误(require.js)

时间:2016-03-18 17:02:28

标签: javascript jquery node.js

我在我的脚本中遇到了这个错误,该错误在一个随机的时刻运行得非常顺利:

 undefined:3
    <!DOCTYPE html>
    ^

    SyntaxError: Unexpected token <
        at Object.parse (native)
        at Request._callback (C:\Users\Tom\Pictures\Bot\background.js:44:26)
        at Request.self.callback (C:\Users\Tom\Pictures\Bot\node_modules\request\request.js:199:22)
        at emitTwo (events.js:87:13)
        at Request.emit (events.js:172:7)
        at Request.<anonymous> (C:\Users\Tom\Pictures\Bot\node_modules\request\request.js:1036:10)
        at emitOne (events.js:82:20)
        at Request.emit (events.js:169:7)
        at IncomingMessage.<anonymous> (C:\Users\Tom\Pictures\Bot\node_modules\request\request.js:963:12)
        at emitNone (events.js:72:20)
        at IncomingMessage.emit (events.js:166:7)

随机&#34;随机&#34;我的意思是它发生在不可预测的时间 - 我运行的机器人每10,000毫秒(10秒)发送一个AJAX请求。稍作(尝试了大约10次)后,它会出现此错误消息并停止运行。我的代码的第3行(显然是错误的地方)涉及代码:

var request = require("request");

我不确定错误是什么,但这是我处理代码的方式吗?

var scan = function() {
    var interval = setInterval(function() {
        request({
            url: "http://www.roblox.com/catalog/json?CatalogContext=1&CurrencyType=0&CreatorID=1&pxMin=0&pxMax=0&SortType=0&SortAggregation=3&SortCurrency=0&IncludeNotForSale=true&LegendExpanded=true&Category=0&PageNumber=1",
            method: 'GET'
        }, function(err, res, body) {
            var r = body;
            if (r && r.length > 0) {
                r = r.toString();
                r = JSON.parse(r);
                var len = r.length;
                for (var i = 0; i < len; i++) {
                   //do stuff here
                }
            }
})
        }, 20);
}

1 个答案:

答案 0 :(得分:2)

我假设每一次Roblox.com都没有响应您的电话。如果他们认为他们通过检查res == 200

是否给你一个有效的JSON响应,你应该能够检查(假设他们正在回头向你发送状态)
     function(err, res, body) {
        if(res !== 200) { //if not success
            //handle issue here
            console.log(body);
            return;
        }
        var r = body;
        if (r && r.length > 0) {
            r = r.toString();
            r = JSON.parse(r);
            var len = r.length;
            for (var i = 0; i < len; i++) {
               //do stuff here
            }
        }
      } 

如果这没有帮助,你可以在你的解析周围使用try catch block,至少它不会导致你的脚本在失败时停止运行