const express = require('express'); const sqlite3 = require('sqlite3').verbose(); const bodyParser = require('body-parser'); const cors = require('cors'); const path = require('path'); const fs = require('fs'); const app = express(); const PORT = process.env.PORT || 3000; // Middleware app.use(cors()); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); // Database setup const dbFile = path.join(__dirname, 'webs', 'genshin.db'); const db = new sqlite3.Database(dbFile, (err) => { if (err) { console.error('Error opening database:', err.message); } else { console.log('Connected to the SQLite database.'); initializeDatabase(); } }); function initializeDatabase() { db.serialize(() => { db.run(`CREATE TABLE IF NOT EXISTS ys ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL UNIQUE, globalcount INTEGER DEFAULT 0 )`); const characters = ['klee', 'nahida', 'kirara', 'dori', 'babara']; const stmt = db.prepare("INSERT OR IGNORE INTO ys (name, globalcount) VALUES (?, 0)"); characters.forEach(char => { stmt.run(char); }); stmt.finalize(); console.log('Database initialized.'); }); } // Serve static files // Serve root files (index.html, img, etc.) app.use(express.static(path.join(__dirname))); // API Routes // Get count app.get('/api/count/:name', (req, res) => { const name = req.params.name; db.get("SELECT globalcount FROM ys WHERE name = ?", [name], (err, row) => { if (err) { res.status(500).json({ error: err.message }); return; } if (row) { // Format matches the previous PHP array structure: [{globalcount: 123}] res.json([{ globalcount: row.globalcount }]); } else { res.status(404).json({ error: "Character not found" }); } }); }); // Update count app.post('/api/count/:name', (req, res) => { const name = req.params.name; const localCount = parseInt(req.body.localcount) || 0; // First get current count to add to it (though atomic update is better) // Using atomic update directly: db.run("UPDATE ys SET globalcount = globalcount + ? WHERE name = ?", [localCount, name], function(err) { if (err) { res.status(500).send("Update failed: " + err.message); return; } if (this.changes > 0) { res.send("更新成功"); } else { res.send("没有找到全局计数值"); // Or create if not exists } }); }); // Fallback for specific PHP routes to redirect/handle gracefully if needed, // but we will update frontend to use /api/count/:name. app.listen(PORT, () => { console.log(`Server running on http://localhost:${PORT}`); });