在 Next.js 與 TypeScript 使用匯率
從 Next.js Server Component 取得即時匯率,把 API 密鑰留在伺服器,並在快取回應時保留底層匯率的實際更新時間。
請從 Server Component 或 Route Handler 呼叫 exchangerate.dev,不要把密鑰放進瀏覽器程式碼。Next.js 可每 60 秒重新驗證上游請求,而 source、market_session 與 data_updated_at 會說明快取匯率的實際狀態。
Key points
把
EXCHANGERATE_API_KEY 保存在只供伺服器使用的環境變數,不要加上 NEXT_PUBLIC_。使用伺服器端
fetch 與 next: { revalidate: 60 },避免每次瀏覽都呼叫上游。顯示
data_updated_at,不要把回應 timestamp 當成市場觀測的新鮮度。指示性匯率用於展示與分析,最終結算金額由付款服務商決定。
從伺服器端取得匯率
Server Component 不在瀏覽器執行,因此可讀取私人環境變數。此例只請求 USD 對 EUR 與 GBP,檢查 HTTP 狀態並回傳有類型的 JSON。
快取請求,同時保留觀測時間
next: { revalidate: 60 } 把上游請求的快取壽命限制為 60 秒。它會減少重複呼叫,但不會把每日參考匯率變成盤中匯率,因此必須保留 source、market_session 與 data_updated_at。
不要公開密鑰
以
NEXT_PUBLIC_ 開頭的環境變數可能進入瀏覽器套件。請只在伺服器程式碼讀取 EXCHANGERATE_API_KEY。匿名呼叫適合快速測試,正式環境應使用密鑰。分開展示貨幣與結算貨幣
商店可用指示性匯率顯示約數本地價格。最終扣款應由付款服務商提供,因為費用、點差、四捨五入及結算時間都會改變可執行金額。
- 把 API 密鑰留在伺服器。
- 只快取成功回應,不快取 401 或 429。
- 需要判斷新鮮度時顯示來源與觀測時間。
- 以原來的商品價格和貨幣作為結算依據。
MM
exchangerate.dev
為使用外匯數據的開發者而設的整合指南。