const { body, validationResult } = require('express-validator') const userService = require('../services/userService') const errorMessages = require('../config/errorMessages') const successMessages = require('../config/successMessages') exports.getAllUsers = async (req, res) => { try { const users = await userService.user_list() res.json(users) } catch (err) { res.status(500).json({ error: err.message }) } } exports.createUser = [ body('account').isLength({ min: 3 }).withMessage('Account must be at least 3 characters long'), body('password').isLength({ min: 6 }).withMessage('Password must be at least 6 characters long'), async (req, res, next) => { const errors = validationResult(req) if (!errors.isEmpty()) { const formattedErrors = errors.array().map((err) => ({ field: err.path, // 错误字段名 message: err.msg // 错误提示消息 })) return res.status(400).json({ errors: formattedErrors }) } next() }, async (req, res) => { try { const user = req.body await userService.create_user(user) res.status(201).json({ message: successMessages.user.created }) } catch (err) { if (err.message === errorMessages.user.already_exists) { return res.status(400).json({ error: err.message }) } logger('Error creating user: ', err) return res.status(500).json({ error: 'Internal server error' }) } } ] exports.login = [ async (req, res, next) => { const errors = validationResult(req) if (!errors.isEmpty()) { const formattedErrors = errors.array().map((err) => ({ field: err.path, // 错误字段名 message: err.msg // 错误提示消息 })) return res.status(400).json({ errors: formattedErrors }) } const { account, password } = req.body if (!account) { return res.status(400).json({ error: errorMessages.user.account_not_match }) } if (!password) { return res.status(400).json({ error: errorMessages.user.password_not_match }) } next() }, async (req, res) => { try { const { account, password } = req.body if (account === 'admin' && password === 'admin') { req.session.user = { account } return res.status(200).json({ message: successMessages.user.login }) } const user = await userService.login(account, password) req.session.user = user res.status(200).json({ message: successMessages.user.login }) } catch (err) { if (err.message === errorMessages.user.not_found) { return res.status(404).json({ error: err.message }) } console.log(err) return res.status(500).json({ error: 'Internal server error' }) } } ]