1
0
mirror of https://github.com/ZeroCatDev/ClassworksKV.git synced 2025-07-01 20:09:23 +00:00
ClassworksKV/app.js
2024-11-17 16:16:16 +08:00

137 lines
3.5 KiB
JavaScript

var createError = require("http-errors");
var express = require("express");
var path = require("path");
var cookieParser = require("cookie-parser");
var logger = require("morgan");
const bodyParser = require('body-parser');
var indexRouter = require("./routes/index");
var usersRouter = require("./routes/users");
var app = express();
var cors = require("cors");
app.options("*", cors());
app.use(cors())
//全局变量
global.dirname = __dirname;
// view engine setup
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "ejs");
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, "public")));
const { PrismaClient } = require("@prisma/client");
const prisma = new PrismaClient();
// 上传作业数据
app.post("/upload", async (req, res) => {
try {
const date = new Date().toISOString().split("T")[0];
const data = req.body;
// 使用 upsert 来确保每个日期只有一条记录
await prisma.homework.upsert({
where: {
date: date,
},
update: {
data: data,
},
create: {
date: date,
data: data,
},
});
res.json({
status: true,
msg: "上传成功",
});
} catch (error) {
console.error("Upload error:", error);
res.json({
status: false,
msg: "上传失败:" + error.message,
});
}
});
// 下载作业数据
app.get("/download", async (req, res) => {
try {
const date = req.query.date;
const homework = await prisma.homework.findFirst({
where: {
date: date,
},
});
if (!homework) {
throw new Error("该日期未上传数据");
}
res.json({
status: true,
msg: "下载成功",
...homework.data,
});
} catch (error) {
console.error("Download error:", error);
res.json({
status: false,
msg: "下载失败:" + error.message,
});
}
});
app.get("/config", async (req, res) => {
res.json({
"//": "学生名字列表(推荐按学号顺序排列)除最后一项外,每个学生姓名后面必须加一个逗号",
"//": "如果不需要“出勤”功能,请把下面“:”后面的“[]”中的内容删除即可",
studentList: ["张三", "李四", "王五", "赵六", "钱七"],
"//": "作业框排版(前面的中括号中的科目显示在分割线左侧,后面在右侧)除每个中括号中的最后一项外,每个科目后面必须加一个逗号",
homeworkArrange: [
["语文", "数学", "英语"],
["物理", "化学", "生物"],
["政治", "历史", "地理"],
],
"//": "这里需填入部署ServerAPI的服务器url",
"//": "端口默认17312无需改动(除非更改Python代码)",
"//": "127.0.0.1仅适用于本地测试,实际部署请使用公网/内网ip地址或域名",
url: "http://localhost:3030",
});
});
app.get("/test", async (req, res) => {
res.render("test.ejs");
})
app.use("/", indexRouter);
app.use("/users", usersRouter);
// catch 404 and forward to error handler
app.use(function (req, res, next) {
next(createError(404));
});
// error handler
app.use(function (err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get("env") === "development" ? err : {};
// render the error page
res.status(err.status || 500);
res.render("error");
});
module.exports = app;