UNPKG

dailyhot-api

Version:
96 lines (95 loc) 3.29 kB
import { config } from "../config.js"; import { getCache, setCache, delCache } from "./cache.js"; import logger from "./logger.js"; import axios from "axios"; // 基础配置 const request = axios.create({ // 请求超时设置 timeout: config.REQUEST_TIMEOUT, withCredentials: true, }); // 请求拦截 request.interceptors.request.use((request) => { if (!request.params) request.params = {}; // 发送请求 return request; }, (error) => { logger.error("❌ [ERROR] request failed"); return Promise.reject(error); }); // 响应拦截 request.interceptors.response.use((response) => { return response; }, (error) => { // 继续传递错误 return Promise.reject(error); }); // GET export const get = async (options) => { const { url, headers, params, noCache, ttl = config.CACHE_TTL, originaInfo = false, responseType = "json", } = options; logger.info(`🌐 [GET] ${url}`); try { // 检查缓存 if (noCache) await delCache(url); else { const cachedData = await getCache(url); if (cachedData) { logger.info("💾 [CHCHE] The request is cached"); return { fromCache: true, updateTime: cachedData.updateTime, data: cachedData.data, }; } } // 缓存不存在时请求接口 const response = await request.get(url, { headers, params, responseType }); const responseData = response?.data || response; // 存储新获取的数据到缓存 const updateTime = new Date().toISOString(); const data = originaInfo ? response : responseData; await setCache(url, { data, updateTime }, ttl); // 返回数据 logger.info(`✅ [${response?.status}] request was successful`); return { fromCache: false, updateTime, data }; } catch (error) { logger.error("❌ [ERROR] request failed"); throw error; } }; // POST export const post = async (options) => { const { url, headers, body, noCache, ttl = config.CACHE_TTL, originaInfo = false } = options; logger.info(`🌐 [POST] ${url}`); try { // 检查缓存 if (noCache) await delCache(url); else { const cachedData = await getCache(url); if (cachedData) { logger.info("💾 [CHCHE] The request is cached"); return { fromCache: true, updateTime: cachedData.updateTime, data: cachedData.data }; } } // 缓存不存在时请求接口 const response = await request.post(url, body, { headers }); const responseData = response?.data || response; // 存储新获取的数据到缓存 const updateTime = new Date().toISOString(); const data = originaInfo ? response : responseData; if (!noCache) { await setCache(url, { data, updateTime }, ttl); } // 返回数据 logger.info(`✅ [${response?.status}] request was successful`); return { fromCache: false, updateTime, data }; } catch (error) { logger.error("❌ [ERROR] request failed"); throw error; } };