i0110 commited on
Commit
e7c2c72
·
verified ·
1 Parent(s): bc312df

Update server.js

Browse files
Files changed (1) hide show
  1. server.js +10 -20
server.js CHANGED
@@ -61,25 +61,25 @@ class SpaceCache {
61
  }
62
 
63
  invalidate() {
64
- this.lastUpdate = 0; // 强制使缓存失效
65
- console.log('缓存被强制失效');
66
  }
67
  }
68
 
69
  const spaceCache = new SpaceCache();
70
 
71
  // 用于获取 Spaces 数据的函数,带有重试机制
72
- async function fetchSpacesWithRetry(username, token, maxRetries = 5, retryDelay = 3000) {
73
  let retries = 0;
74
  while (retries < maxRetries) {
75
  try {
 
76
  const headers = token ? { 'Authorization': `Bearer ${token}` } : {};
77
  const response = await axios.get(`https://huggingface.co/api/spaces?author=${username}`, {
78
  headers,
79
  timeout: 10000 // 设置 10 秒超时
80
  });
81
  const spaces = response.data;
82
- console.log(`获取到 ${spaces.length} 个 Spaces for ${username} (尝试 ${retries + 1}/${maxRetries})`);
83
  return spaces;
84
  } catch (error) {
85
  retries++;
@@ -89,7 +89,7 @@ async function fetchSpacesWithRetry(username, token, maxRetries = 5, retryDelay
89
  } else if (error.request) {
90
  errorDetail += ', No response received (possible network issue)';
91
  }
92
- console.error(`获取 Spaces 列表失败 for ${username} (尝试 ${retries}/${maxRetries}): ${errorDetail}`);
93
  if (retries < maxRetries) {
94
  console.log(`等待 ${retryDelay/1000} 秒后重试...`);
95
  await new Promise(resolve => setTimeout(resolve, retryDelay));
@@ -207,6 +207,7 @@ app.get('/api/proxy/spaces', async (req, res) => {
207
  const spaces = await fetchSpacesWithRetry(username, token);
208
  for (const space of spaces) {
209
  try {
 
210
  const headers = token ? { 'Authorization': `Bearer ${token}` } : {};
211
  const spaceInfoResponse = await axios.get(`https://huggingface.co/api/spaces/${space.id}`, { headers });
212
  const spaceInfo = spaceInfoResponse.data;
@@ -227,11 +228,11 @@ app.get('/api/proxy/spaces', async (req, res) => {
227
  app_port: spaceInfo.cardData?.app_port || 'unknown'
228
  });
229
  } catch (error) {
230
- console.error(`处理 Space ${space.id} 失败:`, error.message);
231
  }
232
  }
233
  } catch (error) {
234
- console.error(`获取 Spaces 列表失败 for ${username}:`, error.message);
235
  }
236
  }
237
 
@@ -459,6 +460,7 @@ class MetricsConnectionManager {
459
 
460
  const instanceId = repoId.split('/')[1];
461
  const url = `https://api.hf.space/v1/${username}/${instanceId}/live-metrics/sse`;
 
462
  const headers = token ? {
463
  'Authorization': `Bearer ${token}`,
464
  'Accept': 'text/event-stream',
@@ -515,7 +517,7 @@ class MetricsConnectionManager {
515
  });
516
 
517
  this.connections.set(repoId, stream);
518
- console.log(`已建立监控连接 (${repoId})`);
519
  return stream;
520
  } catch (error) {
521
  console.error(`无法连接到监控端点 (${repoId}):`, error.message);
@@ -668,18 +670,6 @@ app.post('/api/proxy/update-subscriptions', (req, res) => {
668
  res.json({ success: true, message: '订阅列表已更新' });
669
  });
670
 
671
- // 强制刷新缓存的接口
672
- app.post('/api/proxy/refresh-spaces', async (req, res) => {
673
- try {
674
- console.log('前端请求强制刷新 Spaces 缓存');
675
- spaceCache.invalidate(); // 使缓存失效
676
- res.json({ message: '缓存已失效,数据将被重新获取' });
677
- } catch (error) {
678
- console.error('强制刷新缓存失败:', error.message);
679
- res.status(500).json({ error: '强制刷新缓存失败', details: error.message });
680
- }
681
- });
682
-
683
  // 处理其他请求,重定向到 index.html
684
  app.get('*', (req, res) => {
685
  res.sendFile(path.join(__dirname, 'public', 'index.html'));
 
61
  }
62
 
63
  invalidate() {
64
+ this.lastUpdate = null;
 
65
  }
66
  }
67
 
68
  const spaceCache = new SpaceCache();
69
 
70
  // 用于获取 Spaces 数据的函数,带有重试机制
71
+ async function fetchSpacesWithRetry(username, token, maxRetries = 3, retryDelay = 2000) {
72
  let retries = 0;
73
  while (retries < maxRetries) {
74
  try {
75
+ // 仅在 token 存在时添加 Authorization 头
76
  const headers = token ? { 'Authorization': `Bearer ${token}` } : {};
77
  const response = await axios.get(`https://huggingface.co/api/spaces?author=${username}`, {
78
  headers,
79
  timeout: 10000 // 设置 10 秒超时
80
  });
81
  const spaces = response.data;
82
+ console.log(`获取到 ${spaces.length} 个 Spaces for ${username} (尝试 ${retries + 1}/${maxRetries}),使用 ${token ? 'Token 认证' : '无认证'}`);
83
  return spaces;
84
  } catch (error) {
85
  retries++;
 
89
  } else if (error.request) {
90
  errorDetail += ', No response received (possible network issue)';
91
  }
92
+ console.error(`获取 Spaces 列表失败 for ${username} (尝试 ${retries}/${maxRetries}): ${errorDetail},使用 ${token ? 'Token 认证' : '无认证'}`);
93
  if (retries < maxRetries) {
94
  console.log(`等待 ${retryDelay/1000} 秒后重试...`);
95
  await new Promise(resolve => setTimeout(resolve, retryDelay));
 
207
  const spaces = await fetchSpacesWithRetry(username, token);
208
  for (const space of spaces) {
209
  try {
210
+ // 仅在 token 存在时添加 Authorization 头
211
  const headers = token ? { 'Authorization': `Bearer ${token}` } : {};
212
  const spaceInfoResponse = await axios.get(`https://huggingface.co/api/spaces/${space.id}`, { headers });
213
  const spaceInfo = spaceInfoResponse.data;
 
228
  app_port: spaceInfo.cardData?.app_port || 'unknown'
229
  });
230
  } catch (error) {
231
+ console.error(`处理 Space ${space.id} 失败:`, error.message, `使用 ${token ? 'Token 认证' : '无认证'}`);
232
  }
233
  }
234
  } catch (error) {
235
+ console.error(`获取 Spaces 列表失败 for ${username}:`, error.message, `使用 ${token ? 'Token 认证' : '无认证'}`);
236
  }
237
  }
238
 
 
460
 
461
  const instanceId = repoId.split('/')[1];
462
  const url = `https://api.hf.space/v1/${username}/${instanceId}/live-metrics/sse`;
463
+ // 仅在 token 存在且非空时添加 Authorization 头
464
  const headers = token ? {
465
  'Authorization': `Bearer ${token}`,
466
  'Accept': 'text/event-stream',
 
517
  });
518
 
519
  this.connections.set(repoId, stream);
520
+ console.log(`已建立监控连接 (${repoId}),使用 ${token ? 'Token 认证' : '无认证'}`);
521
  return stream;
522
  } catch (error) {
523
  console.error(`无法连接到监控端点 (${repoId}):`, error.message);
 
670
  res.json({ success: true, message: '订阅列表已更新' });
671
  });
672
 
 
 
 
 
 
 
 
 
 
 
 
 
673
  // 处理其他请求,重定向到 index.html
674
  app.get('*', (req, res) => {
675
  res.sendFile(path.join(__dirname, 'public', 'index.html'));