Learn/Szybki start z JavaScript

Konwersja walut w JavaScript i Node.js

Pobierz kurs przez fetch, oblicz kwotę z odpowiedzi JSON i użyj currency.js do arytmetyki oraz formatowania.

ERexchangerate.dev·Zaktualizowano 1 października 2026·6 min czytania

W przeglądarce możesz zacząć anonimowo. W Node.js i na serwerze trzymaj klucz w zmiennej środowiskowej i zachowaj źródło oraz czas obserwacji.

Najważniejsze punkty
fetch działa w Node 18+, Deno, Bun i nowoczesnych przeglądarkach.
Nie wysyłaj klucza konta do przeglądarki.
currency.js obsługuje kwoty i format, nie pobiera kursu.
Sprawdzaj status HTTP i respektuj Retry-After po 429.
Pokazuj source i effective_at, gdy liczy się świeżość.

Wywołaj z przeglądarki

Anonimowe wywołanie wystarczy do małego kalkulatora lub testu. Ogranicz symbols i ustaw timeout.

Przenieś klucz na serwer

Aplikacja produkcyjna powinna wywoływać API z Node.js, Route Handlera lub usługi serwerowej. Klucz zostaje na serwerze.

Policz i sformatuj kwotę

currency.js pomaga przy kwotach, precyzji i formacie. Najpierw pobierz kurs, potem pomnóż kwotę.

Czytaj świeżość i błędy

Sprawdź sources, effective_at, source i market_session. Po 429 wycofaj się, a kurs traktuj jako orientacyjny.

Najczęstsze pytania

javascript · no keycopy
const response = await fetch("https://api.exchangerate.dev/v1/latest/USD?symbols=EUR,GBP", {
  signal: AbortSignal.timeout(10_000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}; Retry-After: ${response.headers.get("Retry-After")}`);
const data = await response.json();
console.log(data.rates.EUR);
console.log(data.sources.EUR, data.effective_at.EUR);
console.log(data.market_session);
javascript · authenticated call with error handlingcopy
// Node.js server only. Never put an account key in browser code.
const KEY = process.env.EXCHANGERATE_API_KEY;
if (!KEY) throw new Error("Set EXCHANGERATE_API_KEY on your server");

async function getLatest(base = "USD") {
  const response = await fetch(`https://api.exchangerate.dev/v1/latest/${encodeURIComponent(base)}`, {
    headers: { Authorization: `Bearer ${KEY}` },
    redirect: "error",
    signal: AbortSignal.timeout(10_000),
  });
  if (!response.ok) throw new Error(`HTTP ${response.status}; Retry-After: ${response.headers.get("Retry-After")}`);
  return response.json();
}

const data = await getLatest("USD");
console.log(data.rates.GBP, data.effective_at.GBP);
javascript · convert 100 USD to EURcopy
// Node.js server only.
const KEY = process.env.EXCHANGERATE_API_KEY;
if (!KEY) throw new Error("Set EXCHANGERATE_API_KEY on your server");
const response = await fetch("https://api.exchangerate.dev/v1/convert/USD/EUR/100", {
  headers: { Authorization: `Bearer ${KEY}` },
  redirect: "error",
  signal: AbortSignal.timeout(10_000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}; Retry-After: ${response.headers.get("Retry-After")}`);
const data = await response.json();
console.log(data.rate, data.converted);
JavaScript · currency.jscopy
import currency from "currency.js";

const response = await fetch("https://api.exchangerate.dev/v1/latest/USD?symbols=EUR", {
  signal: AbortSignal.timeout(10_000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const data = await response.json();
const rate = data.rates.EUR;
if (!Number.isFinite(rate) || rate <= 0) throw new Error("Invalid rate");
const euros = currency("100.00", { precision: 2, symbol: "€" }).multiply(rate);
console.log(euros.format());
ER
exchangerate.dev
Poradniki integracji dla programistów.

Czytaj dalej

TutorialKursy walut w PythonieCzytaj TutorialHistoryczne kursy i szeregi czasoweCzytaj
PorównanieFixer vs exchangerate.devPorównanieOpen Exchange Rates vs exchangerate.devPorównanieCurrencylayer vs exchangerate.devPoradnikJak pobierać kursy walut w PythoniePoradnikKursy walut w Next.js i TypeScriptPoradnikAlert kursów walut w Pythonie: USD/IDRKurs na żywoEUR/USDKurs na żywoGBP/USDKurs na żywoUSD/JPY