diff --git a/backend/routes/knowledgeBase.js b/backend/routes/knowledgeBase.js index 6362bcc..7abde51 100644 --- a/backend/routes/knowledgeBase.js +++ b/backend/routes/knowledgeBase.js @@ -40,12 +40,27 @@ function createKnowledgeBaseRouter(db, upload) { } // POST /api/knowledge-base/upload - Upload new document - router.post('/upload', requireAuth(db), requireRole(db, 'editor', 'admin'), upload.single('file'), async (req, res) => { + router.post('/upload', requireAuth(db), requireRole(db, 'editor', 'admin'), (req, res, next) => { + upload.single('file')(req, res, (err) => { + if (err) { + console.error('[KB Upload] Multer error:', err); + return res.status(400).json({ error: err.message || 'File upload failed' }); + } + next(); + }); + }, async (req, res) => { + console.log('[KB Upload] Request received:', { + hasFile: !!req.file, + body: req.body, + contentType: req.headers['content-type'] + }); + const uploadedFile = req.file; const { title, description, category } = req.body; // Validate required fields if (!title || !title.trim()) { + console.error('[KB Upload] Error: Title is missing'); if (uploadedFile) fs.unlinkSync(uploadedFile.path); return res.status(400).json({ error: 'Title is required' }); } diff --git a/backend/server.js b/backend/server.js index b2a23d5..0b8db32 100644 --- a/backend/server.js +++ b/backend/server.js @@ -108,7 +108,11 @@ app.use(cors({ origin: CORS_ORIGINS, credentials: true })); -app.use(express.json({ limit: '1mb' })); +// Only parse JSON for requests with application/json content type +app.use(express.json({ + limit: '1mb', + type: 'application/json' +})); app.use(cookieParser()); app.use('/uploads', express.static('uploads', { dotfiles: 'deny',