parent
dc009ef2a4
commit
de05f5c6aa
@ -0,0 +1,83 @@
|
||||
const express = require('express');
|
||||
const mysql = require('mysql2');
|
||||
const bodyParser = require('body-parser');
|
||||
const cors = require('cors');
|
||||
const xlsx = require('xlsx');
|
||||
|
||||
const app = express();
|
||||
const port = 3001;
|
||||
|
||||
// 使用 CORS
|
||||
app.use(cors());
|
||||
|
||||
// 创建数据库连接池
|
||||
const pool = mysql.createPool({
|
||||
host: 'localhost',
|
||||
user: 'root',
|
||||
password: 'mysql123',
|
||||
database: 'mysql'
|
||||
});
|
||||
|
||||
// 解析 JSON 请求体
|
||||
app.use(bodyParser.json());
|
||||
|
||||
// 获取一个随机学生的信息
|
||||
app.get('/api/get-random-student', (req, res) => {
|
||||
const query = 'SELECT * FROM students ORDER BY RAND() LIMIT 1';
|
||||
pool.query(query, (error, results) => {
|
||||
if (error) {
|
||||
return res.status(500).json({ message: 'Error fetching random student' });
|
||||
}
|
||||
if (results.length === 0) {
|
||||
return res.status(404).json({ error: 'No students found' });
|
||||
}
|
||||
res.json(results[0]);
|
||||
});
|
||||
});
|
||||
|
||||
// 为指定的学生添加出勤积分
|
||||
app.post('/api/add-attendance-points', (req, res) => {
|
||||
const { student_id } = req.body;
|
||||
const query = 'UPDATE students SET points = points + 1 WHERE student_id = ?';
|
||||
pool.query(query, [student_id], (error, results) => {
|
||||
if (error) {
|
||||
return res.status(500).json({ message: 'Error adding attendance points' });
|
||||
}
|
||||
res.json({ message: 'Attendance points added', student_id });
|
||||
});
|
||||
});
|
||||
|
||||
// 确认并更新学生的答题积分
|
||||
app.post('/api/confirm-points', (req, res) => {
|
||||
const { student_id, points } = req.body;
|
||||
const query = 'UPDATE students SET points = points + ? WHERE student_id = ?';
|
||||
pool.query(query, [points, student_id], (error, results) => {
|
||||
if (error) {
|
||||
return res.status(500).json({ message: 'Error confirming points' });
|
||||
}
|
||||
res.json({ message: 'Points confirmed and updated', student_id, points });
|
||||
});
|
||||
});
|
||||
|
||||
// 导出学生数据到Excel文件
|
||||
app.get('/api/export-students', (req, res) => {
|
||||
const query = 'SELECT * FROM students';
|
||||
pool.query(query, (error, results) => {
|
||||
if (error) {
|
||||
return res.status(500).json({ message: 'Error fetching students' });
|
||||
}
|
||||
if (results.length === 0) {
|
||||
return res.status(404).json({ error: 'No students found' });
|
||||
}
|
||||
const worksheet = xlsx.utils.json_to_sheet(results);
|
||||
const workbook = xlsx.utils.book_new();
|
||||
xlsx.utils.book_append_sheet(workbook, worksheet, 'Students');
|
||||
res.setHeader('Content-Disposition', 'attachment; filename=students.xlsx');
|
||||
res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
|
||||
res.end(xlsx.write(workbook, { type: 'buffer' }));
|
||||
});
|
||||
});
|
||||
|
||||
app.listen(port, () => {
|
||||
console.log(`Server is running on http://localhost:${port}`);
|
||||
});
|
Loading…
Reference in new issue