| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- var express = require('express');
- var createError = require('http-errors')
- var router = express.Router();
- const models = require('../../models');
- // 获取task
- router.get('/', function (req, res, next) {
- (async function () {
- const { uuid, art } = req.query; // 从查询参数中获取 uuid 和 art
- // 1. 参数校验
- if (!uuid || !art) {
- return res.status(400).json({ message: '请求参数缺失。uuid 和 art 均为必填项。' });
- }
- // 2. 根据 uuid 和 art 查找记录
- const taskRecord = await models.Task.findOne({ uuid: uuid, art: art });
- // 3. 判断是否找到记录
- if (!taskRecord) {
- return res.status(404).json({ message: '未找到匹配的任务数据。' });
- }
- // 4. 返回找到的任务数据
- res.status(200).json(taskRecord.tasks);
- })().catch(next);
- });
- // 提交task id列表
- router.post('/', async (req, res) => {
- try {
- // 验证输入
- const { uuid, art, tasks } = req.body; // 从请求体中获取参数
- // 1. 参数校验
- if (!uuid || !art || !Array.isArray(tasks)) {
- return res.status(400).json({ message: '请求参数缺失或格式不正确。uuid, art 和 tasks (number数组) 均为必填项。' });
- }
- // 2. 验证 tasks 数组中的元素是否都是数字
- if (tasks.some(isNaN)) {
- return res.status(400).json({ message: 'tasks 数组中包含非数字元素。' });
- }
- // 3. 使用 findOneAndUpdate 进行 upsert 操作
- // query: 根据 uuid 和 art 查找记录
- const query = { uuid: uuid, art: art };
- // update: 设置或更新 tasks 字段,并更新 updatedAt 时间
- const update = { tasks: tasks, updatedAt: Date.now() };
- // options:
- // upsert: true - 如果找不到匹配的记录,则创建一条新记录
- // new: true - 返回更新后的文档,而不是原始文档
- const options = { upsert: true, new: true, setDefaultsOnInsert: true };
- const taskRecord = await models.Task.findOneAndUpdate(query, update, options);
- // 4. 返回成功响应
- res.status(200).json({
- message: '任务数据提交成功!',
- data: taskRecord
- });
- } catch (error) {
- console.error('提交任务数据时发生错误:', error);
- // 5. 错误处理
- if (error.code === 11000) { // MongoDB 唯一索引冲突错误码
- return res.status(409).json({ message: '数据冲突:uuid 和 art 的组合已存在,但更新失败。' });
- }
- res.status(500).json({ message: '服务器内部错误,提交失败。' });
- }
- });
- module.exports = router;
|