javascript - 困惑为什么我在 Node.js (require.js) 中得到这个错误

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

我所说的“随机”是指它发生在不可预测的时间 - 我正在运行一个每 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);
}

最佳答案

我假设 Roblox.com 每隔一段时间就无法响应您的调用。您应该能够通过检查 res == 200

来检查(假设他们将 header 中的状态发回给您)他们是否认为他们给了您一个有效的 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 ,至少它不会导致您的脚本在失败时停止运行

关于javascript - 困惑为什么我在 Node.js (require.js) 中得到这个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36090223/

相关文章:

javascript - 您将如何在 TypeScript 中进行模式匹配?

javascript - 第一个下拉菜单总是打开的

javascript - 如何使用 JSON 连接到外部 API?

javascript - 根据 iframe 内的内容调整 iframe 及其父高度

node.js - 卡在 "Starting packager"- React Native

angularjs - 注销后在 Angular js中重新加载页面

node.js - Nodejs EventLoop(带集群模块)和Golang Scheduler的比较

javascript - 将所有代码放入 "window.onload"中与仅将函数名称放入 "window.onload"中有何区别?

jquery - 如何从类属性中删除与模式匹配的类,但保留其他类?

javascript - 使用 jQuery 检测 iPad 用户?