Tutorial/JavaScript 快速入門

用 JavaScript 同 Node.js 做貨幣換算

用全域 fetch API 攞即時匯率,喺 JavaScript 換算金額。Node 18+、Deno、Bun 同現代瀏覽器都用得。起步唔使 key,免費計劃每月 10,000 次呼叫。

MMexchangerate.dev·Jun 19, 2026·5 分鐘閱讀

喺 JavaScript 攞匯率最快嘅路徑,係用 fetch GET /v1/latest/USD。回應係普通 JSON,包含 31 種貨幣嘅匯率同兩個新鮮度欄位:sourcemarket_session第一次呼叫唔使 API key。

Key points
全域 fetch 喺 Node 18+、Deno、Bun 同瀏覽器都係開箱即用,唔使額外依賴。
一次 GET /v1/latest/{base} 就返回 31 種貨幣嘅匯率,加埋 sourcemarket_session
Authorization: Bearer exr_live_... 傳 key;如果平台設定唔到 Authorization,就用 X-API-Key
免費計劃每月 10,000 次呼叫、每分鐘 12 次請求,唔使信用卡。
匯率係指示性,只供參考同分析 — 唔係交易報價。

第一次呼叫,唔使 key

喺 Node 18 或者任何現代瀏覽器,fetch 已經有。一個 await 就讀到 EUR 匯率:

javascript · no keycopy
const res = await fetch("https://api.exchangerate.dev/v1/latest/USD");
const data = await res.json();

console.log(data.rates.EUR);        // 0.87531
console.log(data.source);           // ecb_daily
console.log(data.market_session);   // open

匿名呼叫係按 IP 地址設上限嘅,所以過咗簡單測試就應該轉用免費 key。

加 key 同錯誤處理

將 key 以 bearer token 形式放入 Authorization 標頭。檢查 res.ok,狀態唔對就 throw,等錯誤早啲浮面:

javascript · authenticated call with error handlingcopy
const API = "https://api.exchangerate.dev/v1";
const KEY = "exr_live_...";   // free key at https://exchangerate.dev/signup

async function getLatest(base = "USD") {
  const res = await fetch(`${API}/latest/${base}`, {
    headers: { Authorization: `Bearer ${KEY}` },
  });

  if (!res.ok) {
    const err = await res.json().catch(() => ({}));
    throw new Error(`exchangerate.dev ${res.status}: ${err.message ?? res.statusText}`);
  }

  return res.json();
}

const data = await getLatest("USD");
console.log(data.rates.GBP, data.market_session);

X-API-Key: exr_live_... 標頭都接受,畀嗰啲設定唔到 Authorization 標頭嘅平台用(部分 serverless runtime、Zapier 呢類 no-code 工具)。

換算一個金額

想直接換算就呼叫 /v1/convert/{from}/{to}/{amount}。一個來回就攞到匯率同換算結果:

javascript · convert 100 USD to EURcopy
const res = await fetch(`${API}/convert/USD/EUR/100`, {
  headers: { Authorization: `Bearer ${KEY}` },
});
const data = await res.json();

console.log(data.rate);       // 0.87572
console.log(data.converted);  // 87.57

convert 端點同 latest 一樣返回 sourcemarket_session,所以你可以話畀用戶知匯率屬於邊一類,以及銀行同業交易週而家開唔開市。

理解 source 同 market_session

每個回應都有兩個欄位,講明匯率有幾新、屬於邊類。source 標示數據類別:live 係大約每 60 秒更新一次、貫穿成個交易週嘅綜合現貨共識值;ecb_daily 係歐洲央行每個工作日大約 16:00 CET 發佈一次嘅參考定盤價;fred_daily 係聯儲局每日系列。market_sessionopenweekend,或者代表已知非週末休市嘅 interbank_closed

欄位值意思幾時郁
source: live綜合現貨共識值交易週日內(約 60 秒一次)
source: ecb_daily歐洲央行參考定盤價每個工作日一次(約 16:00 CET)
source: fred_daily聯儲局每日系列每個工作日一次
market_session: weekend星期六或者星期日(銀行同業休市)參考定盤價維持星期五數值;即時數據暫停更新

data_updated_at 欄位話你知底層匯率最後一次寫入嘅時間;timestamp 記錄嘅係回應生成嘅時間。兩個一齊睇,就可以決定點快取、點顯示。

只係指示性匯率
呢啲匯率係為參考、分析同顯示而發佈,唔係交易報價,唔可以用嚟結算交易或者轉賬。每個回應嘅 notice 欄位都有講明。

免費計劃限額

免費 key 每月 10,000 次呼叫、每分鐘 12 次請求。註冊唔使信用卡。超過每分鐘上限 API 會回 429;後退再重試就得。每月配額喺你嘅計費週年日重設。

  • 每月 10,000 次呼叫
  • 每分鐘 12 次請求
  • 唔使信用卡
  • 涵蓋 /v1/latest/v1/convert/v1/range/v1/{date}/{base}
MM
exchangerate.dev
為開發者提供嘅整合指南。

Keep reading

Tutorial用 Python 攞匯率嘅方法Read Guide一次呼叫攞歷史匯率同時間序列Read Reference點樣讀 source 同 market_sessionRead
更多比較exchangerate.dev vs Fixerexchangerate.dev vs Open Exchange Ratesexchangerate.dev vs Currencylayer
學習Reading source and market_session in your pipelineIndicative vs executable FX rates: what a rates API actually gives youECB reference rates, explained
即時匯率EUR/USDGBP/USDUSD/JPY