使用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)
答案 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”。进行更改后,我得到了预期的结果。