const express = require('express'); const router = express.Router(); const authController = require('../../controllers/user/auth'); const Post = require('../../models/Post'); const Comment = require('../../models/Comment'); const User = require('../../models/User'); // 文章详情页 // 文章详情页 router.get('/posts/:id', async (req, res) => { try { const post = await Post.findOne({ _id: req.params.id, isPublished: true }); if (!post) { return res.status(404).render('user/info', { post: null, user: req.session.user || null, message: '文章不存在或已被删除' }); } res.render('user/info', { post: post, // 确保传递的是查询到的文章 user: req.session.user || null }); } catch (err) { console.error('获取文章详情出错:', err); res.status(500).render('user/info', { post: null, user: req.session.user || null, message: '服务器错误,请稍后再试' }); } }); // 注册页面 router.get('/register', (req, res) => { res.render('user/register', { error: null }); }); // 注册提交 router.post('/register', authController.register); // 登录页面 router.get('/login', (req, res) => { res.render('user/login', { error: null }); }); // 登录提交 router.post('/login', authController.login); // 登出 router.get('/logout', authController.logout); // 获取用户资料(包括收藏列表) router.get('/user/profile', async (req, res) => { if (!req.session.user) { return res.status(401).json({ success: false, message: '请先登录' }); } try { const user = await User.findById(req.session.user._id).populate('favorites'); res.json({ success: true, user: { _id: user._id, username: user.username, role: user.role }, favorites: user.favorites || [] }); } catch (err) { console.error('获取用户资料失败:', err); res.status(500).json({ success: false, message: '获取用户资料失败' }); } }); // 收藏文章 router.post('/posts/:id/favorite', async (req, res) => { if (!req.session.user) return res.status(401).json({ success: false, message: '请先登录' }); try { await User.findByIdAndUpdate(req.session.user._id, { $addToSet: { favorites: req.params.id } }); res.json({ success: true }); } catch (err) { res.status(500).json({ success: false, message: '收藏失败' }); } }); // 取消收藏 router.post('/posts/:id/unfavorite', async (req, res) => { if (!req.session.user) return res.status(401).json({ success: false, message: '请先登录' }); try { await User.findByIdAndUpdate(req.session.user._id, { $pull: { favorites: req.params.id } }); res.json({ success: true }); } catch (err) { res.status(500).json({ success: false, message: '取消收藏失败' }); } }); // 获取评论列表 router.get('/posts/:id/comments', async (req, res) => { try { const comments = await Comment.find({ post: req.params.id }).populate('author', 'username').sort({ createdAt: -1 }); res.json({ success: true, comments }); } catch (err) { res.status(500).json({ success: false, message: '获取评论失败' }); } }); // 发表评论 router.post('/posts/:id/comments', async (req, res) => { if (!req.session.user) return res.status(401).json({ success: false, message: '请先登录' }); const { content } = req.body; if (!content || !content.trim()) return res.status(400).json({ success: false, message: '评论内容不能为空' }); try { const comment = new Comment({ content, author: req.session.user._id, post: req.params.id }); await comment.save(); res.json({ success: true, comment }); } catch (err) { res.status(500).json({ success: false, message: '发表评论失败' }); } }); // 用户个人中心页面 router.get('/userInfo', async (req, res) => { if (!req.session.user) { return res.redirect('/login'); } try { const user = await User.findById(req.session.user._id).populate('favorites'); // 获取用户所有评论 const comments = await Comment.find({ author: req.session.user._id }).populate('post', 'title'); res.render('user/userInfo', { user, favorites: user.favorites || [], comments: comments || [] }); } catch (err) { console.error('获取个人中心信息失败:', err); res.status(500).render('user/userInfo', { user: null, favorites: [], comments: [], error: '服务器错误' }); } }); // 修改密码 router.post('/user/changePassword', authController.changePassword); module.exports = router;