意外的令牌<在节点js中位置0的JSON中

时间:2018-04-22 17:45:59

标签: json node.js express request

使用npm请求向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)

2 个答案:

答案 0 :(得分:0)

多次尝试此网址后,它开始给我带来与您所看到的相同的错误。

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

如果您只是将以下代码段保存为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,这不是你的代码。

答案 1 :(得分:0)

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