const express = require('express'); const axios = require('axios'); const SHOW_FULL_IP = false; const app = express(); const port = 7860; const sites = [ { name: 'X1', url: 'https://QSignX-X1.hf.space?key=X' }, { name: 'X2', url: 'https://QSignX-X2.hf.space?key=X' }, { name: 'X3', url: 'https://QSignX-X3.hf.space?key=X' }, { name: 'X4', url: 'https://QSignX-X4.hf.space?key=X' }, { name: 'X5', url: 'https://QSignX-X5.hf.space?key=X' } ]; const timeout = 30000; // 访问超时 // 使用中间件,接收所有请求 app.use((req, res, next) => { let userIP = req.headers['x-forwarded-for'] || req.socket.remoteAddress || null; // 如果 SHOW_FULL_IP 为 false,则隐藏部分 IP 地址 if (!SHOW_FULL_IP) { const parts = userIP.split('.'); if (parts.length === 4) { parts[2] = 'xxx'; parts[3] = 'xxx'; } userIP = parts.join('.'); } const currentDate = new Date().toLocaleString('zh-CN', { hour12: false }); //console.log(`[${currentDate}] 收到来自 IP ${userIP} 的请求`); res.locals.userIP = userIP; next(); }); app.get('/', (req, res) => { const userIP = res.locals.userIP; // 从 res.locals 中获取 userIP const currentDate = new Date().toLocaleString('zh-CN', { hour12: false }); // 并发请求 const requests = sites.map(site => axios.get(site.url, { timeout }) .then(response => ({ name: site.name, status: response.status, url: site.url })) .catch(error => { if (error.code === 'ECONNABORTED') { return { name: site.name, error: '请求超时', url: site.url }; } else { return { name: site.name, error: error.message, url: site.url }; } }) ); Promise.all(requests) .then(results => { const availableSites = results.filter(result => result.status === 200); if (availableSites.length > 0) { // 从可用地址中随机选择一个 const randomIndex = Math.floor(Math.random() * availableSites.length); const randomSite = availableSites[randomIndex]; console.log(`[${currentDate}] ${userIP} → ${randomSite.url}`); res.redirect(302, randomSite.url); // 使用 302 作为临时重定向状态码 } else { console.log(`[${currentDate}] ${userIP} 没有可用的地址`); res.json({ message: '少女为主人痛哭...' }); } }) .catch(err => { console.error(`[${currentDate}] ${userIP} 请求时出错: ${err.message}`); res.status(500).json({ error: `发生错误: ${err.message}` }); }); }); app.use((req, res) => { const userIP = res.locals.userIP; // 从 res.locals 中获取 userIP const requestedRoute = req.originalUrl; const currentDate = new Date().toLocaleString('zh-CN', { hour12: false }); console.log(`[${currentDate}] ${userIP} 错误路由 ${requestedRoute}`); res.status(404).json({ error: '少女做不到...' }); }); app.listen(port, '0.0.0.0', () => { console.log(`少女为您祈福 0.0.0.0:${port}`); });