Я только начал узнавать о том, как делать http-запросы и API.
Я использую API-интерфейс Bitcoinaverage, который возвращает JSON для крипто-и фиатной валюты, которую вы запрашиваете. Самый первый ключ в json - это объект, имя которого получено из запроса, который вы сделали.
Например, если вы хотите, чтобы цена BT C в долларах США, объект имя будет BTCUSD. Или BTCEUR et c ...
{
BTCUSD: { //The only key that changes based on your request. LTCUSD, ETHEUR etc...
ask: 7825.19,
bid: 7817.5,
last: 7816.09,
high: 8166.22,
low: 7783.28,
volume: 57342.21168518,
open: {
hour: 7844.91,
day: 7900.31,
week: 8769.23,
month: 9812.03,
month_3: 7226.94,
month_6: 10081.48,
year: 3883.6
},
averages: { day: 7948.24, week: 8573.39, month: 9315.18 },
changes: { price: [Object], percent: [Object] },
volume_percent: 71.59,
timestamp: 1583923337,
display_timestamp: '2020-03-11 10:42:17',
display_symbol: 'BTC-USD'
}
}
Если бы я хотел войти в систему, скажем значение «last», я мог бы написать что-то вроде этого:
app.post("/", function (req, res) {
var crypto = req.body.crypto;
var fiat = req.body.fiat;
restClient.tickerAllGlobal(crypto, fiat, function(response) {
var data = JSON.parse(response);
console.log(data.BTCUSD.last);
});
});
Вышеуказанный фрагмент, очевидно, не будет работать, если пользователь запросит цену в евро вместо доллара США. Я думал, что могу просто объединить две переменные и написать console.log(data.crypto+fiat.last);
, но я просто получаю ответ "NaN". Я предполагаю, что это потому, что переменные crypto
и fiat
являются строками, когда возвращаются парсером тела.
Я думал об использовании JSON.parse()
, но это тоже не сработает, поскольку crypto+fiat
недопустимо json. Затем я подумал об использовании eval()
, не уверен, что это сработает, но даже если это сработало, не очень хорошая идея использовать его при вводе данных пользователем, верно?
Так как же это сделать с запросами? что я получаю от пользователя, не повторяя себя?
Вот полный код, если что-то неясно:
const express = require("express");
const bodyParser = require("body-parser");
const bitcoinAverage = require("bitcoinaverage");
const publicKey = '123456789...';
var restClient = bitcoinAverage.restfulClient(publicKey);
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;
restClient.tickerAllGlobal(crypto, fiat, function(response) {
var data = JSON.parse(response);
var price = data.crypto+fiat.last;
console.log(price);
});
});
app.listen(3000, function () {
console.log("Server running:3000");
});