Forráskód Böngészése

feat:修改创建文章接口

wangsisi 18 órája
szülő
commit
1caa84efeb
1 módosított fájl, 50 hozzáadás és 12 törlés
  1. 50 12
      routes/admin/articles.js

+ 50 - 12
routes/admin/articles.js

@@ -99,6 +99,10 @@ router.post('/', async function(req, res, next) {
         //白名单过滤
         const body = filterBody(req)
 
+        // 添加调试日志
+        console.log('创建文章请求体大小:', JSON.stringify(body).length);
+        console.log('Content字段长度:', body.content ? body.content.length : 0);
+
         const article = await Article.create(body)
         res.status(201).json({
             status:true,
@@ -106,6 +110,11 @@ router.post('/', async function(req, res, next) {
             data:article
         }); 
     }catch(error){
+        // 添加详细的错误日志
+        console.error('创建文章错误:', error);
+        console.error('错误堆栈:', error.stack);
+        console.error('请求体:', JSON.stringify(req.body, null, 2));
+
         if(error.name === 'SequelizeValidationError'){
             const errors = error.errors.map(e =>e.message)
 
@@ -114,10 +123,22 @@ router.post('/', async function(req, res, next) {
                 message:'请求参数错误',
                 errors
             });
+        }else if(error.name === 'SequelizeDatabaseError'){
+            res.status(500).json({ 
+                status:false,
+                message:'数据库错误',
+                errors:[error.message]
+            });
+        }else if(error.name === 'SequelizeConnectionError'){
+            res.status(500).json({ 
+                status:false,
+                message:'数据库连接错误',
+                errors:[error.message]
+            });
         }else{
             res.status(500).json({ 
                 status:false,
-                message:'失败',
+                message:'服务器内部错误',
                 errors:[error.message]
             });
         }
@@ -198,18 +219,35 @@ router.put('/:id', async function(req, res, next) {
 });
 
 function filterBody(req){
-    return {
-        title:req.body.title,
-        content:req.body.content,
-        type:req.body.type,
-        img:req.body.img,
-        date:req.body.date,
-        author:req.body.author,
-        category:req.body.category,
-        crop:req.body.crop,
-        seoKeyword:req.body.seoKeyword,
-        seoDescription:req.body.seoDescription
+    // 数据清理和验证
+    const body = {
+        title: req.body.title ? String(req.body.title).trim() : null,
+        content: req.body.content ? String(req.body.content) : null,
+        type: req.body.type ? parseInt(req.body.type) : null,
+        img: req.body.img ? String(req.body.img).trim() : null,
+        date: req.body.date ? new Date(req.body.date) : null,
+        author: req.body.author ? String(req.body.author).trim() : null,
+        category: req.body.category ? parseInt(req.body.category) : null,
+        crop: req.body.crop ? parseInt(req.body.crop) : null,
+        seoKeyword: req.body.seoKeyword ? String(req.body.seoKeyword).trim() : null,
+        seoDescription: req.body.seoDescription ? String(req.body.seoDescription).trim() : null
+    };
+
+    // 验证必填字段
+    if (!body.title) {
+        throw new Error('标题不能为空');
+    }
+
+    if (!body.content) {
+        throw new Error('内容不能为空');
     }
+
+    // 验证标题长度
+    if (body.title.length > 255) {
+        throw new Error('标题长度不能超过255个字符');
+    }
+
+    return body;
 }
 
 module.exports = router;