dailyhot-api
Version:
An Api on Today's Hot list
96 lines (95 loc) • 3.29 kB
JavaScript
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;
}
};