Learn/เริ่มต้นใช้ JavaScript แปลงสกุลเงินด้วย JavaScript และ Node.js
ใช้ fetch ดึงอัตรา ใช้ผลลัพธ์ JSON คำนวณ และใช้ currency.js จัดการจำนวนเงินกับรูปแบบการแสดงผล
บนเบราว์เซอร์เริ่มจากการเรียกแบบไม่ใช้ key ได้ ส่วน Node.js และเซิร์ฟเวอร์ควรเก็บ key ใน environment และเก็บ source กับเวลาที่สังเกตไว้
ประเด็นสำคัญ
fetch ใช้ได้ใน Node 18+, Deno, Bun และเบราว์เซอร์สมัยใหม่ อย่าใส่ account key ในโค้ดที่ส่งไปเบราว์เซอร์ currency.js ใช้คำนวณและจัดรูปแบบ ไม่ได้ดึงอัตรา ตรวจ HTTP status และทำตาม Retry-After เมื่อได้ 429 แสดง source และ effective_at เมื่อผู้ใช้ต้องการรู้ความใหม่ของข้อมูล เรียกจากเบราว์เซอร์
การเรียกแบบไม่ใช้ key เหมาะกับเครื่องคำนวณเล็ก ๆ หรือการทดสอบ จำกัด symbols และตั้ง timeout ด้วย
ย้าย key ไปเซิร์ฟเวอร์
แอปจริงควรเรียกจาก Node.js, Route Handler หรือบริการฝั่งเซิร์ฟเวอร์ key ต้องอยู่ในสภาพแวดล้อมเซิร์ฟเวอร์
คำนวณและจัดรูปแบบจำนวนเงิน
currency.js ช่วยเรื่องจำนวนเงิน ความละเอียด และรูปแบบ เรียก API เพื่อเอาอัตราก่อนแล้วจึงคูณจำนวนเงิน
อ่านความใหม่และข้อผิดพลาด
ตรวจ sources, effective_at, source และ market_session เมื่อได้ 429 ให้ถอยก่อนลองใหม่ และถือว่าอัตราเป็นข้อมูลอ้างอิง
คำถามที่พบบ่อย
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());