url_server / server.js
CatPtain's picture
Update server.js
1e6a865 verified
raw
history blame
3.14 kB
// === 引入依赖 ===
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);
});