feat: 优化API错误处理、CORS支持、请求日志、404处理
- 添加CORS headers支持跨域访问 - 添加请求日志记录 - 改善各API的错误处理 - 添加404处理器 - 添加timestamp返回便于调试
This commit is contained in:
@@ -2,37 +2,73 @@ const express = require('express');
|
||||
const path = require('path');
|
||||
|
||||
const app = express();
|
||||
const PORT = 3000;
|
||||
const PORT = process.env.PORT || 3000;
|
||||
|
||||
// Middleware
|
||||
app.use(express.json());
|
||||
app.use(express.static(path.join(__dirname, 'public')));
|
||||
|
||||
// CORS headers
|
||||
app.use((req, res, next) => {
|
||||
res.header('Access-Control-Allow-Origin', '*');
|
||||
res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
|
||||
res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
|
||||
if (req.method === 'OPTIONS') {
|
||||
return res.sendStatus(200);
|
||||
}
|
||||
next();
|
||||
});
|
||||
|
||||
// Request logging
|
||||
app.use((req, res, next) => {
|
||||
const start = Date.now();
|
||||
res.on('finish', () => {
|
||||
const duration = Date.now() - start;
|
||||
console.log(`${req.method} ${req.path} - ${res.statusCode} (${duration}ms)`);
|
||||
});
|
||||
next();
|
||||
});
|
||||
|
||||
// API: 搜索优惠券 (预留淘宝/京东联盟API接入点)
|
||||
app.get('/api/search', async (req, res) => {
|
||||
const { keyword } = req.query;
|
||||
if (!keyword) {
|
||||
return res.json({ success: false, message: '请输入搜索关键词' });
|
||||
return res.status(400).json({ success: false, message: '请输入搜索关键词' });
|
||||
}
|
||||
|
||||
try {
|
||||
// TODO: 接入淘宝联盟API / 京东联盟API
|
||||
// 目前返回模拟数据用于本地验证
|
||||
const mockResults = generateMockResults(keyword);
|
||||
res.json({ success: true, data: mockResults });
|
||||
res.json({ success: true, data: mockResults, keyword, timestamp: Date.now() });
|
||||
} catch (error) {
|
||||
console.error('搜索API错误:', error);
|
||||
res.status(500).json({ success: false, message: '服务器错误,请重试' });
|
||||
}
|
||||
});
|
||||
|
||||
// API: 今日特价
|
||||
app.get('/api/today-deals', (req, res) => {
|
||||
try {
|
||||
// TODO: 接入真实特价API
|
||||
const deals = generateMockDeals();
|
||||
res.json({ success: true, data: deals });
|
||||
res.json({ success: true, data: deals, timestamp: Date.now() });
|
||||
} catch (error) {
|
||||
console.error('特价API错误:', error);
|
||||
res.status(500).json({ success: false, message: '服务器错误,请重试' });
|
||||
}
|
||||
});
|
||||
|
||||
// API: 线报广场
|
||||
app.get('/api/linbao', (req, res) => {
|
||||
try {
|
||||
// TODO: 接入线报数据源
|
||||
const linbao = generateMockLinbao();
|
||||
res.json({ success: true, data: linbao });
|
||||
res.json({ success: true, data: linbao, timestamp: Date.now() });
|
||||
} catch (error) {
|
||||
console.error('线报API错误:', error);
|
||||
res.status(500).json({ success: false, message: '服务器错误,请重试' });
|
||||
}
|
||||
});
|
||||
|
||||
// API: 历史价格查询 (预留)
|
||||
@@ -60,6 +96,11 @@ app.get('/', (req, res) => {
|
||||
res.sendFile(path.join(__dirname, 'public', 'index.html'));
|
||||
});
|
||||
|
||||
// 404 handler
|
||||
app.use((req, res) => {
|
||||
res.status(404).json({ success: false, message: 'API不存在' });
|
||||
});
|
||||
|
||||
// Mock data generators
|
||||
function generateMockResults(keyword) {
|
||||
return [
|
||||
|
||||
Reference in New Issue
Block a user