diff --git a/routes/auth.js b/routes/auth.js new file mode 100644 index 0000000..6e81823 --- /dev/null +++ b/routes/auth.js @@ -0,0 +1,49 @@ +const express = require('express'); +const bcrypt = require('bcryptjs'); +const jwt = require('jsonwebtoken'); +const {getDB} = require('../database'); + +const router = express.Router(); +const JWT_SECRET = process.env.JWT_SECRET || 'your-secret-key'; + + +// 验证token中间件 +const authenticateToken = (req, res, next) => { + const authHeader = req.headers['authorization']; + const token = authHeader && authHeader.split(' ')[1]; + + if (!token) { + return res.status(401).json({success: false, message: '访问令牌缺失'}); + } + + jwt.verify(token, JWT_SECRET, (err, user) => { + if (err) { + return res.status(403).json({success: false, message: '访问令牌无效'}); + } + req.user = user; + next(); + }); +}; + +// 获取当前用户信息 +router.get('/me', authenticateToken, async (req, res) => { + try { + const db = getDB(); + const [users] = await db.execute( + 'SELECT id, username, role, avatar, points, created_at FROM users WHERE id = ?', + [req.user.userId] + ); + + if (users.length === 0) { + return res.status(404).json({success: false, message: '用户不存在'}); + } + + res.json({success: true, user: users[0]}); + } catch (error) { + console.error('获取用户信息错误:', error); + res.status(500).json({success: false, message: '获取用户信息失败'}); + } +}); + +module.exports = router; +module.exports.authenticateToken = authenticateToken; \ No newline at end of file diff --git a/routes/couponproducts.js b/routes/couponproducts.js index d3cc167..92068c5 100644 --- a/routes/couponproducts.js +++ b/routes/couponproducts.js @@ -25,10 +25,9 @@ router.get('/', auth, async (req, res) => { const total = countResult[0].total; console.log(total, '数量'); - // 获取订单列表 const query = ` SELECT - c.id, c.products_id, price, count, type, discount, for_a_amount + c.id, c.products_id, price, count, type, discount, for_a_amount, precent FROM coupon_products as c ${whereClause} ORDER BY c.id DESC @@ -48,9 +47,21 @@ router.get('/', auth, async (req, res) => { } item.products_name = product_name; } - res.json({ success: true, data: couponProducts[0] }); + res.json({ + success: true, + data: couponProducts[0], + pagination: { + page: pageNum, + limit: limitNum, + total, + pages: Math.ceil(total / limitNum) + } + }); } catch (error) { - res.status(500).json({ success: false, error: error.message }); + res.status(500).json({ + success: false, + error: error.message + }); } }); @@ -64,9 +75,10 @@ router.post('/', auth, async (req, res) => { count, type, discount, - for_a_amount - ) VALUES (?,?,?,?,?,?)`, - [JSON.stringify(req.body.products_id), req.body.price, req.body.count, req.body.type, req.body.discount, req.body.for_a_amount] + for_a_amount, + precent + ) VALUES (?,?,?,?,?,?,?)`, + [JSON.stringify(req.body.products_id), req.body.price, req.body.count, req.body.type, req.body.discount, req.body.for_a_amount, req.body.precent] ); res.json({ success: true, data: couponProduct[0] }); } catch (error) { diff --git a/routes/products.js b/routes/products.js index 287a3d2..34d7d85 100644 --- a/routes/products.js +++ b/routes/products.js @@ -43,7 +43,7 @@ router.get('/', async (req, res) => { // 获取商品列表 const query = ` - SELECT id, name, rongdou_price, category, points_price, stock, image_url as image, description, status, payment_methods, created_at, updated_at + SELECT id, name, rongdou_price, category, points_price, stock, image_url as image, description, status, payment_methods, created_at, updated_at, sales FROM products ${whereClause} ORDER BY created_at DESC diff --git a/routes/shopbackend.js b/routes/shopbackend.js index 6cc723e..be3807f 100644 --- a/routes/shopbackend.js +++ b/routes/shopbackend.js @@ -80,6 +80,20 @@ router.get('/flash-products', auth, async (req, res) => { const queryParams = [...params]; console.log('Query params:', queryParams, 'Query:', query); const [flashProducts] = await getDB().execute(query, queryParams); + + + // 处理商品详情 + for (const item of flashProducts) { + const productQuery = ` + SELECT * + FROM products + WHERE id = ? + `; + const [product] = await getDB().execute(productQuery, [item.products_id]); + item.product_name = product[0].name + item.product_price = product[0].price + } + res.json({ success: true, data: { @@ -209,8 +223,9 @@ router.get('/recommend-products', auth, async (req, res) => { } // 获取总数 - const countQuery = `SELECT COUNT(*) as total FROM flash_product ${whereClause}`; + const countQuery = `SELECT COUNT(*) as total FROM recommend_product ${whereClause}`; const [countResult] = await getDB().execute(countQuery, params); + console.log('countResult:', countResult); const total = countResult[0].total; // 获取商品列表 @@ -224,8 +239,19 @@ router.get('/recommend-products', auth, async (req, res) => { // 确保参数数组正确传递 const queryParams = [...params]; - console.log('Query params:', queryParams, 'Query:', query); const [recommendProducts] = await getDB().execute(query, queryParams); + + // 处理商品详情 + for (const item of recommendProducts) { + const productQuery = ` + SELECT * + FROM products + WHERE id = ? + `; + const [product] = await getDB().execute(productQuery, [item.products_id]); + item.product_detail = product[0]; + } + res.json({ success: true, data: { diff --git a/server.js b/server.js index 60c8362..7a44861 100644 --- a/server.js +++ b/server.js @@ -105,6 +105,11 @@ app.use('/specifications', require('./routes/specifications')); // 优惠券商品接口 app.use('/couponproducts', require('./routes/couponproducts')); +// 认证接口 +app.use('/auth', require('./routes/auth')); + + + // 404处理 app.use(notFound);