const express = require('express'); const app = express(); const mongoose = require('mongoose'); const xlsx = require('xlsx'); const fs = require('fs'); // 连接MongoDB数据库 mongoose.connect('mongodb://localhost:27017/school', { useNewUrlParser: true, useUnifiedTopology: true }); const db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); db.once('open', function() { console.log('Connected to the database'); // 读取并解析Excel文件 const workbook = xlsx.readFile('students.xlsx'); const sheetName = workbook.SheetNames[0]; // 假设只处理第一个工作表 const worksheet = workbook.Sheets[sheetName]; const studentsData = xlsx.utils.sheet_to_json(worksheet, { header: 1 }); // 将工作表转换为JSON数组,第一行是标题 // 创建一个临时数组来存储要保存的学生对象 const studentsToSave = []; // 遍历数据并创建学生对象 studentsData.forEach((student, index) => { if (index === 0) return; // 跳过标题行 studentsToSave.push(new Student({ name: student.name, id: student.id, // points字段可以从Excel中读取,如果存在的话,否则使用默认值0 points: student.points ? Number(student.points) : 0 })); }); // 保存学生数据到数据库 Student.insertMany(studentsToSave, (err) => { if (err) return console.error('Error saving students to the database:', err); console.log('Students successfully saved to the database'); }); }); // 定义Student模型 const studentSchema = new mongoose.Schema({ name: String, id: String, points: { type: Number, default: 0 } }); const Student = mongoose.model('Student', studentSchema); // 创建API端点来提供学生数据 app.get('/api/students', async (req, res) => { try { const students = await Student.find(); res.json(students); } catch (err) { res.status(500).json({ error: 'Failed to fetch students' }); } }); // 启动服务器 const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Server is running on port ${PORT}`); });