Files
workdizhi/server.js

87 lines
2.7 KiB
JavaScript

const express = require('express');
const fs = require('fs').promises;
const path = require('path');
const cors = require('cors');
const bodyParser = require('body-parser');
const app = express();
const DATA_DIR = path.join(__dirname, 'data');
const DATA_FILE = path.join(DATA_DIR, 'urls.json');
const PORT = process.env.PORT || 3000;
// 中间件
app.use(cors());
app.use(bodyParser.json({ limit: '10mb' }));
app.use(express.static('public'));
// 确保数据目录存在
async function ensureDataDir() {
try {
await fs.mkdir(DATA_DIR, { recursive: true });
} catch (error) {
console.error('创建数据目录失败:', error);
}
}
// 读取数据
app.get('/api/urls', async (req, res) => {
try {
await ensureDataDir();
const data = await fs.readFile(DATA_FILE, 'utf8');
res.json(JSON.parse(data));
} catch (error) {
if (error.code === 'ENOENT') {
// 文件不存在,返回空数据
res.json({ urls: [], categories: [] });
} else {
console.error('读取数据失败:', error);
res.status(500).json({ error: '读取数据失败', message: error.message });
}
}
});
// 保存数据
app.post('/api/urls', async (req, res) => {
try {
await ensureDataDir();
const data = {
urls: req.body.urls || [],
categories: req.body.categories || [],
lastUpdated: new Date().toISOString()
};
console.log('收到保存请求:', {
urlsCount: data.urls.length,
categoriesCount: data.categories.length,
timestamp: data.lastUpdated
});
await fs.writeFile(DATA_FILE, JSON.stringify(data, null, 2), 'utf8');
// 验证文件是否写入成功
const verifyData = await fs.readFile(DATA_FILE, 'utf8');
const verifyJson = JSON.parse(verifyData);
console.log('数据已保存,验证:', {
urlsCount: verifyJson.urls.length,
categoriesCount: verifyJson.categories.length
});
res.json({ success: true, message: '数据保存成功', savedCount: { urls: data.urls.length, categories: data.categories.length } });
} catch (error) {
console.error('保存数据失败:', error);
res.status(500).json({ error: '保存数据失败', message: error.message });
}
});
// 健康检查
app.get('/api/health', (req, res) => {
res.json({ status: 'ok', timestamp: new Date().toISOString() });
});
// 启动服务器
app.listen(PORT, () => {
console.log(`Workdizhi 服务器运行在端口 ${PORT}`);
console.log(`数据文件位置: ${DATA_FILE}`);
});