Я узнал о работе с 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>