【问题标题】:Unexpected token < in JSON at position 0 in node js节点js中位置0的JSON中的意外令牌<
【发布时间】:2018-10-02 18:45:00
【问题描述】:

我正在使用 npm request 向 cryptonator api 发出请求,但是当我想使用从请求返回的数据来呈现我的主页时,它会注销语法错误。

我的代码

router.get('/dashboard', isLoggedIn,  function(req,res){
    request('https://api.cryptonator.com/api/ticker/btc-usd', function(err,response,body){
        if(!err && response.statusCode == 200){
            var data = JSON.parse(body);
            res.render('dash-web/home', {crypto: data})
        }
    })
})

错误

<!DOCTYPE html>
^

SyntaxError: Unexpected token < in JSON at position 0
    at Object.parse (native)
    at Request._callback (/home/ubuntu/workspace/bitcoin.1/main/routes/dashboard.js:61:29)
    at Request.self.callback (/home/ubuntu/workspace/bitcoin.1/main/node_modules/request/request.js:186:22)
    at emitTwo (events.js:106:13)
    at Request.emit (events.js:191:7)
    at Request.<anonymous> (/home/ubuntu/workspace/bitcoin.1/main/node_modules/request/request.js:1163:10)
    at emitOne (events.js:96:13)
    at Request.emit (events.js:188:7)
    at IncomingMessage.<anonymous> (/home/ubuntu/workspace/bitcoin.1/main/node_modules/request/request.js:1085:12)
    at IncomingMessage.g (events.js:292:16)
    at emitNone (events.js:91:20)
    at IncomingMessage.emit (events.js:185:7)
    at endReadableNT (_stream_readable.js:974:12)
    at _combinedTickCallback (internal/process/next_tick.js:80:11)
    at process._tickCallback (internal/process/next_tick.js:104:9)

【问题讨论】:

  • 您正在尝试将 HTML 解析为 JSON。
  • kk 谢谢你提供的信息,我能做些什么来防止错误发生@Colin
  • 为了帮助您调试,您实际上可以呈现您意外收到的 HTML - 它可能会提示您正在发生什么。
  • 我正在使用 ejs,对此我真的很陌生,如果您能提供帮助,我会很高兴,但我无法弄清楚错误来自thanks@paul跨度>
  • 删除var data = JSON.parse(body); 行并将下一行替换为res.send(data); - 它应该会显示您意外收到的页面

标签: json node.js express request


【解决方案1】:

多次尝试此 URL 后,它开始给我与您看到的相同的错误。

发生的情况是,有时cryptonator返回正确的JSON,有时它返回一个HTML页面,其中包含一些javascript,将一些跟踪数据添加到请求并重定向它,然后重定向返回JSON。

如果您只是将以下 sn-p 保存为 index.js 并使用 node index 运行几次,您应该会看到这两种行为。

var request = require('request');
request('https://api.cryptonator.com/api/ticker/btc-usd', function (err, response, body) {
    if (!err && response.statusCode == 200) {
        if (response.headers["content-type"] !== "application/json")
        {
            // got redirected
            console.log(body);
        } else {
            // got proper json
            var data = JSON.parse(body);
            console.log(data.ticker);
        }
    };
});

我以前没有在 API 中看到过这种行为 - 我想这是防止 DDOS 攻击的一些防御措施。

我会就此联系 Cryptonator,这不是你的代码。

【讨论】:

  • 好的,如果您发现任何问题,请随时通知我,谢谢您也尝试解决问题。 @保罗
【解决方案2】:

检查您的网址。可能是 404 页面未找到。我在使用 Binance API 时遇到了同样的错误。我发现 Binance API Docs 显示了过期的端点。因此,我实际上并没有得到预期的 JSON,而是得到了一个 404 Page Not Found 网站,因此是 html 标签。端点在文档中列为“/fapi/v1/openOrders”。我发现有效的是'/api/v3/openOrders'。进行更改后,我得到了预期的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 2021-09-12
    • 2018-10-17
    相关资源
    最近更新 更多