Bitcoin вызов API возвращает тело как неопределенное - PullRequest
0 голосов
/ 20 января 2020

Я узнал о работе с API и разрабатывал веб-приложение для конвертации криптовалют в бумажные валюты. Я пытался проанализировать JSON из вызова API, но я продолжаю получать следующую ошибку о том, что тело не определено.

SyntaxError: Unexpected token u in JSON at position 0
    at JSON.parse (<anonymous>)
    at Request._callback (C:\Users\cfarrell\Desktop\Bitcoin-Ticker\index.js:33:21)
    at self.callback (C:\Users\cfarrell\Desktop\Bitcoin-Ticker\node_modules\request\request.js:185:22)
    at Request.emit (events.js:223:5)
    at Request.onRequestError (C:\Users\cfarrell\Desktop\Bitcoin-Ticker\node_modules\request\request.js:881:8)
    at ClientRequest.emit (events.js:223:5)
    at TLSSocket.socketErrorListener (_http_client.js:406:9)
    at TLSSocket.emit (events.js:223:5)
    at emitErrorNT (internal/streams/destroy.js:92:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)

Я проверил URL для API вручную (https://apiv2.bitcoinaverage.com/convert/global?from=BTC&to=USD&amount=5) и у него есть данные. Я не нашел ни опечаток, ни чего-либо, поэтому я не знаю, что сделал неправильно. Я попытался прочитать некоторые другие ответы для этого типа ошибки, но, похоже, ничего не работает, и я не понимаю, что делать.

const express = require("express");
const bodyParser = require("body-parser");
const request = require("request");

const app = express();

app.use(bodyParser.urlencoded({
  extended: true
}));

app.get("/", function(req, res) {
  res.sendFile(__dirname + "/index.html");
});


app.post("/", function(req, res) {

  var crypto = req.body.crypto;
  var fiat = req.body.fiat;
  var amount = req.body.amount;

  var options = {
    url: "https://apiv2.bitcoinaverage.com/convert/global",
    method: "GET",
    qs: {
      from: crypto,
      to: fiat,
      amount: amount,
    }
  };

  request(options, function(error, response, body) {
    var data = JSON.parse(body);
    var price = data.price;
    var currentDate = data.time;

    res.write("<p>The current date is " + currentDate + "</p>");
    res.write("<h1>The current price of " + amount + " " + crypto +
      " is currently worth " + price + " " + fiat + "</h1>");
    res.send();
  })
});

app.listen(3000, function() {
  console.log("Server is running on port 3000.");
});
<!DOCTYPE html>
<html lang="en" dir="ltr">

<head>
  <meta charset="utf-8">
  <title>Bitcoin Ticker</title>
</head>

<body>
  <h1>Bitcoin Ticker</h1>
  <form action="/" method="post">

    <input type="text" name="amount" placeholder="Quantity">

    <select name="crypto">
      <option value="BTC">Bitcoin</option>
      <option value="ETH">Ethereum</option>
      <option value="LTC">Litecoin</option>
    </select>

    <select name="fiat">
      <option value="USD">US Dollars</option>
      <option value="GBP">GB Pounds</option>
      <option value="EUR">EU Euros</option>
    </select>

    <button type="submit" name="button">Check</button>
  </form>
</body>

</html>
...