Compare commits
2 Commits
2252dd8f97
...
f411f06b7a
| Author | SHA1 | Date | |
|---|---|---|---|
| f411f06b7a | |||
|
|
46afc47477 |
@ -16,6 +16,7 @@ const copyRoutes = require('./routes/copy');
|
|||||||
const folderRoutes = require('./routes/folder');
|
const folderRoutes = require('./routes/folder');
|
||||||
const healthRoutes = require('./routes/health');
|
const healthRoutes = require('./routes/health');
|
||||||
const versionRoutes = require('./routes/version');
|
const versionRoutes = require('./routes/version');
|
||||||
|
const adminRoutes = require('./routes/admin');
|
||||||
const errorHandler = require('./middleware/errorHandler');
|
const errorHandler = require('./middleware/errorHandler');
|
||||||
const logger = require('./middleware/logger');
|
const logger = require('./middleware/logger');
|
||||||
|
|
||||||
@ -45,6 +46,7 @@ app.use('/api/copy', copyRoutes);
|
|||||||
app.use('/api/folder', folderRoutes);
|
app.use('/api/folder', folderRoutes);
|
||||||
app.use('/api/health', healthRoutes);
|
app.use('/api/health', healthRoutes);
|
||||||
app.use('/api/version', versionRoutes);
|
app.use('/api/version', versionRoutes);
|
||||||
|
app.use('/api/admin', adminRoutes);
|
||||||
|
|
||||||
app.use(errorHandler);
|
app.use(errorHandler);
|
||||||
|
|
||||||
|
|||||||
28
backend/src/middleware/cache.js
Normal file
28
backend/src/middleware/cache.js
Normal 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;
|
||||||
28
backend/src/routes/admin.js
Normal file
28
backend/src/routes/admin.js
Normal 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;
|
||||||
Loading…
Reference in New Issue
Block a user