expressServer/controllers/userController.js
LingandRX 8741389ef5 refactor: 优化项目结构和代码
- 更新 .gitignore 文件,排除 Idea 项目配置
- 移除 vuepress 缓存目录
- 优化 app.js 中的错误处理和状态码导入- 调整 CORS 配置,移除未使用的 allowdHeaders
- 更新 hashUtils.js 中的密码处理函数
- 优化 index.js 中的路由定义
- 更新 mongodbConfig.js 中的数据库连接逻辑
- 升级 express到 5.0.0- 更新 mongoose 到 8.7.1
2025-01-01 12:21:43 +08:00

125 lines
3.8 KiB
JavaScript

const { body, validationResult } = require('express-validator')
const logger = require('morgan')
const userService = require('../services/userService')
const FetchResult = require('../common/web/fetchResult')
const messages = require('../config/messages')
const { HTTP_STATUS } = require('../common/constant/httpStatus')
const { SearchQuery } = require('../models/Search')
exports.getAllUsers = async (res) => {
try {
const users = await userService.user_list()
return FetchResult.formatResult(res, HTTP_STATUS.ACCEPTED, 'success', users)
} catch (err) {
return FetchResult.formatResult(res, HTTP_STATUS.INTERNAL_SERVER_ERROR, 'Internal server error')
}
}
exports.findUserList = async (req, res) => {
try {
const { page, size, sort } = req.query
const search = new SearchQuery({ page: page, size: size, sort: sort })
const result = await userService.getUserList(search)
return FetchResult.formatResult(res, HTTP_STATUS.ACCEPTED, 'success', result)
} catch (err) {
console.log(err)
return FetchResult.formatResult(res, HTTP_STATUS.INTERNAL_SERVER_ERROR, 'Internal server error')
}
}
exports.createUser = [
body('account').isLength({ min: 3 }).withMessage('Account must be at least 3 characters long'),
body('account').isEmpty().withMessage('Account is required'),
body('password').isLength({ min: 6 }).withMessage('Password must be at least 6 characters long'),
body('password').isEmpty().withMessage('Password is required'),
async (req, res, next) => {
const errors = validationResult(req)
if (!errors.isEmpty()) {
return FetchResult.formatResult(
res,
HTTP_STATUS.BAD_REQUEST,
errors
.array()
.map((err) => err.msg)
.join(', ')
)
}
next()
},
async (req, res) => {
try {
const user = req.body
await userService.createUser(user)
return FetchResult.formatResult(res, HTTP_STATUS.CREATED, messages.user.created)
} catch (err) {
logger('Error creating user: ', err)
if (err.message === messages.user.already_exists) {
return FetchResult.formatResult(res, HTTP_STATUS.CONFLICT, messages.user.already_exists)
}
return FetchResult.formatResult(
res,
HTTP_STATUS.INTERNAL_SERVER_ERROR,
'Internal server error'
)
}
}
]
exports.login = [
body('account').notEmpty().withMessage('Account is required'),
body('password').notEmpty().withMessage('Password is required'),
async (req, res, next) => {
const errors = validationResult(req)
if (!errors.isEmpty()) {
console.log(errors)
return FetchResult.formatResult(
res,
400,
errors
.array()
.map((err) => err.msg)
.join(', ')
)
}
next()
},
async (req, res) => {
try {
const { account, password } = req.body
req.session.user = await userService.login(account, password)
return FetchResult.formatResult(res, 200, messages.user.login)
} catch (err) {
if (err.message === messages.user.not_found) {
return FetchResult.formatResult(res, 401, messages.user.account_password_not_match)
}
logger('Error logging in: ', err)
return FetchResult.formatResult(
res,
HTTP_STATUS.INTERNAL_SERVER_ERROR,
'Internal server error'
)
}
}
]
exports.getUserExist = async (req, res) => {
try {
const { account } = req.query
const exist = await userService.get_user_exist(account)
if (!exist) {
return FetchResult.formatResult(res, 404, messages.user.not_found)
}
return FetchResult.formatResult(res, 200, messages.user.exist)
} catch (err) {
logger('Error checking user existence: ', err)
return FetchResult.formatResult(res, HTTP_STATUS.INTERNAL_SERVER_ERROR, 'Internal server error')
}
}