- Fix React hydration mismatch in ThemeProvider with mounted state check - Update layout.tsx to use light theme by default instead of system - Optimize photo filtering with useMemo in page.tsx - Add Express mock API for development - Update CLAUDE.md with comprehensive project documentation - Create backend/ and admin/ directories for future development
81 lines
1.8 KiB
JavaScript
81 lines
1.8 KiB
JavaScript
const express = require('express');
|
|
const cors = require('cors');
|
|
const app = express();
|
|
|
|
app.use(cors());
|
|
app.use(express.json());
|
|
|
|
// 模拟照片数据
|
|
const photos = [
|
|
{
|
|
id: 1,
|
|
src: '/placeholder.jpg',
|
|
title: '城市夜景',
|
|
description: '繁华都市中的宁静夜晚',
|
|
category: 'city',
|
|
tags: ['夜景', '城市', '建筑'],
|
|
date: '2024-01-15',
|
|
exif: {
|
|
camera: 'Canon EOS R5',
|
|
lens: '24-70mm f/2.8',
|
|
settings: 'f/4, 1/60s, ISO 800',
|
|
location: '上海外滩'
|
|
}
|
|
},
|
|
{
|
|
id: 2,
|
|
src: '/placeholder.jpg',
|
|
title: '自然风光',
|
|
description: '山川河流间的诗意景色',
|
|
category: 'nature',
|
|
tags: ['风景', '自然', '山水'],
|
|
date: '2024-01-10',
|
|
exif: {
|
|
camera: 'Sony A7R IV',
|
|
lens: '16-35mm f/2.8',
|
|
settings: 'f/8, 1/125s, ISO 200',
|
|
location: '张家界'
|
|
}
|
|
},
|
|
{
|
|
id: 3,
|
|
src: '/placeholder.jpg',
|
|
title: '人像摄影',
|
|
description: '捕捉真实的情感瞬间',
|
|
category: 'portrait',
|
|
tags: ['人像', '情感', '生活'],
|
|
date: '2024-01-05',
|
|
exif: {
|
|
camera: 'Nikon D850',
|
|
lens: '85mm f/1.4',
|
|
settings: 'f/2.8, 1/200s, ISO 400',
|
|
location: '工作室'
|
|
}
|
|
}
|
|
];
|
|
|
|
// 获取所有照片
|
|
app.get('/api/photos', (req, res) => {
|
|
res.json(photos);
|
|
});
|
|
|
|
// 获取单张照片
|
|
app.get('/api/photos/:id', (req, res) => {
|
|
const photo = photos.find(p => p.id === parseInt(req.params.id));
|
|
if (photo) {
|
|
res.json(photo);
|
|
} else {
|
|
res.status(404).json({ error: 'Photo not found' });
|
|
}
|
|
});
|
|
|
|
// 获取分类
|
|
app.get('/api/categories', (req, res) => {
|
|
const categories = [...new Set(photos.map(p => p.category))];
|
|
res.json(categories);
|
|
});
|
|
|
|
const PORT = 3001;
|
|
app.listen(PORT, () => {
|
|
console.log(`Mock API server running on http://localhost:${PORT}`);
|
|
}); |