/** * Thêm BACKEND_URL vào đường dẫn hình ảnh * @param {Object} data - Dữ liệu cần xử lý * @returns {Object} - Dữ liệu đã được xử lý với đường dẫn hình ảnh đầy đủ */ function addBaseUrlToImages(data, baseUrl) { // baseUrl can be passed explicitly (e.g., from req), otherwise fall back to env const BACKEND_URL = baseUrl || process.env.BACKEND_URL || ''; // Tạo bản sao sâu để tránh thay đổi dữ liệu gốc const processedData = JSON.parse(JSON.stringify(data)); // Hàm đệ quy để xử lý tất cả các URL hình ảnh trong đối tượng const processObject = (obj) => { if (!obj || typeof obj !== 'object') return; Object.keys(obj).forEach(key => { // Kiểm tra nếu thuộc tính chứa đường dẫn hình ảnh bắt đầu bằng /uploads/ if (typeof obj[key] === 'string' && obj[key].startsWith('/uploads/')) { // Thêm BACKEND_URL nếu đường dẫn chưa có http if (!obj[key].startsWith('http')) { obj[key] = `${BACKEND_URL}${obj[key]}`; } } else if (typeof obj[key] === 'object') { // Đệ quy xử lý các đối tượng và mảng lồng nhau processObject(obj[key]); } }); }; processObject(processedData); return processedData; } module.exports = { addBaseUrlToImages };