// === 引入依赖 === const express = require('express'); const bodyParser = require('body-parser'); const cors = require('cors'); const requestIp = require('request-ip'); const crypto = require('crypto'); const { URL } = require('url'); const app = express(); // === 配置常量 === const PORT = process.env.PORT || 3000; const HOST = '0.0.0.0'; console.log(`Starting server! PORT: ${PORT}`); // === 中间件配置 === const corsOptions = { origin: '*', methods: ['GET', 'POST', 'OPTIONS'], allowedHeaders: ['Content-Type'], }; app.use(cors(corsOptions)); app.use(bodyParser.json()); app.use(requestIp.mw()); // === 内存存储 === const urlMap = new Map(); const EXPIRATION_TIME = 90 * 1000; // 90 秒 const CLEANUP_INTERVAL = 60 * 1000; // 定期清理任务 setInterval(() => { const now = Date.now(); const expiredTime = now - EXPIRATION_TIME; for (const [userId, { timestamp }] of urlMap) { if (timestamp < expiredTime) { console.log(`Deleting expired data for user: ${userId}`); urlMap.delete(userId); } } }, CLEANUP_INTERVAL); // === 路由 === // 健康检查 app.get("/", (req, res) => { res.status(200).send({ message: "Server is healthy and running." }); }); // 存储 URL app.post('/storeURL', (req, res) => { const url = req.body.url; const ip = req.clientIp; if (!url) { return res.status(400).json({ success: false, message: 'URL is required.' }); } try { new URL(url); } catch (err) { return res.status(400).json({ success: false, message: 'Invalid URL format.' }); } const fingerprint = crypto.createHash('sha256').update(`${ip}-${req.headers['user-agent']}`).digest('hex'); const userId = `${ip}-${fingerprint}`; urlMap.set(userId, { url, timestamp: Date.now() }); console.log(`Stored URL for user: ${userId}`); res.json({ success: true, message: 'URL stored successfully.', userId }); }); // 获取 URL app.get('/getURL', (req, res) => { const ip = req.clientIp; const fingerprint = crypto.createHash('sha256').update(`${ip}-${req.headers['user-agent']}`).digest('hex'); const userId = `${ip}-${fingerprint}`; if (urlMap.has(userId)) { const storedData = urlMap.get(userId); storedData.timestamp = Date.now(); urlMap.set(userId, storedData); console.log(`Retrieved URL for user: ${userId}`); res.json({ success: true, url: storedData.url }); } else { console.error(`No URL found for user: ${userId}`); res.status(404).json({ success: false, message: 'URL not found for this user.' }); } }); // === 启动服务器 === app.listen(PORT, HOST, (err) => { if (err) { console.error(`Error starting server: ${err}`); process.exit(1); } console.log(`Server running on http://${HOST}:${PORT}`); }); // === 全局错误处理 === process.on('uncaughtException', (err) => { console.error('Uncaught Exception:', err); }); process.on('unhandledRejection', (reason, promise) => { console.error('Unhandled Rejection at:', promise, 'reason:', reason); });