145 lines
4.5 KiB
JavaScript
145 lines
4.5 KiB
JavaScript
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;
|