Compare commits

...

2 Commits

Author SHA1 Message Date
f411f06b7a 后端: 添加缓存中间件 2026-03-10 10:01:19 +00:00
Backend Developer
46afc47477 后端: 添加管理员API 2026-03-10 10:00:54 +00:00
3 changed files with 58 additions and 0 deletions

View File

@ -16,6 +16,7 @@ const copyRoutes = require('./routes/copy');
const folderRoutes = require('./routes/folder');
const healthRoutes = require('./routes/health');
const versionRoutes = require('./routes/version');
const adminRoutes = require('./routes/admin');
const errorHandler = require('./middleware/errorHandler');
const logger = require('./middleware/logger');
@ -45,6 +46,7 @@ app.use('/api/copy', copyRoutes);
app.use('/api/folder', folderRoutes);
app.use('/api/health', healthRoutes);
app.use('/api/version', versionRoutes);
app.use('/api/admin', adminRoutes);
app.use(errorHandler);

View File

@ -0,0 +1,28 @@
// 简单缓存中间件
const cache = new Map();
const cacheMiddleware = (req, res, next) => {
if (req.method !== 'GET') {
return next();
}
const key = req.originalUrl;
if (cache.has(key)) {
const { data, expiry } = cache.get(key);
if (Date.now() < expiry) {
return res.json(data);
}
cache.delete(key);
}
const originalJson = res.json.bind(res);
res.json = (data) => {
cache.set(key, { data, expiry: Date.now() + 60000 }); // 1分钟缓存
return originalJson(data);
};
next();
};
module.exports = cacheMiddleware;

View File

@ -0,0 +1,28 @@
const express = require('express');
const db = require('../db');
const router = express.Router();
// Admin: Get all users
router.get('/users', (req, res) => {
db.query('SELECT id, username, email, storage_used, storage_limit, created_at FROM users')
.then(users => res.json({ users }))
.catch(err => res.status(500).json({ error: err.message }));
});
// Admin: Get system stats
router.get('/stats', (req, res) => {
Promise.all([
db.query('SELECT COUNT(*) as count FROM users'),
db.query('SELECT COUNT(*) as count FROM files'),
db.query('SELECT COUNT(*) as count FROM shares')
]).then(([users, files, shares]) => {
res.json({
totalUsers: users[0]?.count || 0,
totalFiles: files[0]?.count || 0,
totalShares: shares[0]?.count || 0
});
});
});
module.exports = router;