Những lưu ý quan trọng khi sử dụng vnstock-js 2.x.
Có, qua proxy. VietCap chặn request từ trình duyệt (CORS), nên gọi thẳng sẽ lỗi:
Access to fetch at 'https://trading.vietcap.com.vn/...' has been blocked by CORS policy
Gắn proxy có sẵn của thư viện vào server của bạn rồi tạo client với proxy:
// app/api/vnstock/[...path]/route.ts
import { nextHandler } from "vnstock-js/proxy";
export const { GET, POST } = nextHandler();
// client component
import { createClient } from "vnstock-js";
const vn = createClient({ proxy: "/api/vnstock" });
const quote = await vn.stock("FPT").price();
Server Component, API Route, Express, script Node thì gọi thẳng, không cần proxy. Chỉ báo ở vnstock-js/indicators là hàm thuần, chạy được ở mọi nơi. Xem Trình duyệt & proxy.
Từ 2.0, mọi số tiền tính bằng đồng: 127000 là 127.000 đồng. Bản 1.x trả giá theo nghìn đồng (127) và thanh khoản theo tỷ đồng, dễ nhầm khi cộng trừ. Muốn hiển thị kiểu bảng điện, chia cho 1000 ở bước hiển thị. Chỉ số vẫn là điểm. Xem Quy ước & đơn vị.
init() không?Không. Danh mục mã, lịch nghỉ và tỷ số quý được tải ở lần dùng đầu. Muốn tải trước, dùng createClient({ preload: true }). Muốn giữ cache giữa các lần chạy script, dùng fileStorage() của vnstock-js/node.
watch() chỉ có dữ liệu trong giờ giao dịch?Chế độ stream nhận giá khớp qua WebSocket nên chỉ có tick mới khi thị trường mở (9:00 tới 11:30, 13:00 tới 14:45, thứ Hai tới thứ Sáu, trừ ngày lễ). Ngoài giờ, chế độ poll vẫn trả một tick với giá đóng cửa. Nhớ gọi hàm dừng mà watch() trả về, nếu không tiến trình sẽ chạy mãi.
Điều kiện trên bảng giá và tỷ số quý (ROE, ROA, biên lợi nhuận) chạy trước, không tốn request. P/E, P/B và vốn hoá phải hỏi theo từng mã, nên chỉ được hỏi cho các mã còn lại sau bước đầu. Lọc theo nhóm (group: 'VN30') nhanh hơn lọc cả sàn. Kết quả nên cache ở tầng ứng dụng.
VietCap chỉ cho xem khối ngoại của phiên hiện tại. Lịch sử do repo vnstock-js tự ghi mỗi ngày từ năm 2026, nên phiên trước ngày bắt đầu ghi không có trong kết quả. Gọi foreign() không tham số để lấy phiên hiện tại.
RATE_LIMIT?Nguồn từ chối vì gọi quá nhiều trong thời gian ngắn. Thư viện đã tự thử lại với backoff; nếu vẫn lỗi, giảm số request song song, gộp nhiều mã vào một vn.prices([...]), và cache kết quả.
Hai nguồn này cần xác thực. vnstock-js chỉ dùng nguồn công khai, không cần token:
Chưa. Hiện hỗ trợ cổ phiếu, chỉ số, vàng và tỷ giá.
Xem CONTRIBUTING.md trên GitHub.