diff --git a/app.js b/app.js index fa94532..fe10396 100644 --- a/app.js +++ b/app.js @@ -1,22 +1,37 @@ -const createError = require('http-errors') -const express = require('express') -const path = require('path') -const logger = require('morgan') -const cors = require('cors') -const session = require('express-session') -const { RedisStore } = require('connect-redis') -const Redis = require('ioredis') -const cookieParser = require('cookie-parser') -const indexRouter = require('./routes/index') -const userRouter = require('./routes/userRouter') -const accountRouter = require('./routes/accountRouter') -require('dotenv').config() +import createError from 'http-errors' + +import express from 'express' + +import path from 'path' + +import logger from 'morgan' + +import cors from 'cors' + +import session from 'express-session' + +import { RedisStore } from 'connect-redis' + +import Redis from 'ioredis' + +import cookieParser from 'cookie-parser' + +import indexRouter from './routes/index' + +import userRouter from './routes/userRouter' + +import accountRouter from './routes/accountRouter' + +import { config } from 'dotenv' // mongodb数据库连接 -const { connectMongoDB } = require('./config/mongodbConfig') -const loginUtil = require('./utils/loginUtil') -const { HTTP_STATUS } = require('./common/constant/httpStatus') +import { connectMongoDB } from './config/mongodbConfig' +import { HTTP_STATUS } from './common/constant/httpStatus' + +import loginUtil from './utils/loginUtil' + +config() // 初始化 Redis 客户端 const redisClient = new Redis({ host: process.env.REDIS_HOST, diff --git a/common/constant/httpStatus.js b/common/constant/httpStatus.js index b0b01d3..5abb9eb 100644 --- a/common/constant/httpStatus.js +++ b/common/constant/httpStatus.js @@ -1,7 +1,7 @@ /** * HTTP 状态码常量 */ -const HTTP_STATUS = { +export const HTTP_STATUS = { // 信息响应 (100–199) /** @type {number} 继续 */ CONTINUE: 100, @@ -67,4 +67,4 @@ const HTTP_STATUS = { GATEWAY_TIMEOUT: 504 } -module.exports = { HTTP_STATUS } +export default { HTTP_STATUS } diff --git a/common/web/fetchResult.js b/common/web/fetchResult.js index 1745318..7682c1f 100644 --- a/common/web/fetchResult.js +++ b/common/web/fetchResult.js @@ -16,4 +16,4 @@ class FetchResult { } } -module.exports = FetchResult +export default FetchResult diff --git a/config/messages.js b/config/messages.js index 3c59ada..9c5e421 100644 --- a/config/messages.js +++ b/config/messages.js @@ -1,5 +1,5 @@ // messages.js -module.exports = { +export default { user: { // 成功消息 created: 'user created', @@ -7,6 +7,7 @@ module.exports = { deleted: 'user deleted', login: 'login successful', logout: 'logout successful', + exists: 'user exists', // 错误消息 not_found: 'user not found', diff --git a/config/mongodbConfig.js b/config/mongodbConfig.js index 3b36d6b..69bdf43 100644 --- a/config/mongodbConfig.js +++ b/config/mongodbConfig.js @@ -1,6 +1,10 @@ -const mongoose = require('mongoose') -const logger = require('morgan') -require('dotenv').config() +import mongoose from 'mongoose' + +import logger from 'morgan' + +import { config } from 'dotenv' + +config() // 使用环境变量存储敏感信息 const account = process.env.MONGO_ACCOUNT @@ -10,7 +14,7 @@ const port = process.env.MONGO_PORT || '27017' let isConnected = false -exports.connectMongoDB = async function () { +export async function connectMongoDB() { if (process.env.NODE_ENV === 'development') { logger(account, password, host, port) } diff --git a/controllers/userController.js b/controllers/userController.js index 53f7d4a..b19ff3c 100644 --- a/controllers/userController.js +++ b/controllers/userController.js @@ -1,12 +1,12 @@ -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') +import { body, validationResult } from 'express-validator' +import logger from 'morgan' +import userService from '../services/userService' +import FetchResult from '../common/web/fetchResult' +import messages from '../config/messages' +import { HTTP_STATUS } from '../common/constant/httpStatus' +import { SearchQuery } from '../models/search' -exports.getAllUsers = async (res) => { +export async function getAllUsers(res) { try { const users = await userService.getUserList() return FetchResult.formatResult(res, HTTP_STATUS.ACCEPTED, 'success', users) @@ -15,7 +15,7 @@ exports.getAllUsers = async (res) => { } } -exports.findUserList = async (req, res) => { +export async function findUserList(req, res) { try { const { page, size, sort } = req.query const search = new SearchQuery({ page: page, size: size, sort: sort }) @@ -28,7 +28,7 @@ exports.findUserList = async (req, res) => { } } -exports.createUser = [ +export const 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'), @@ -63,7 +63,7 @@ exports.createUser = [ } ] -exports.login = [ +export const login = [ body('account').notEmpty().withMessage('Account is required'), body('password').notEmpty().withMessage('Password is required'), async (req, res, next) => { @@ -99,7 +99,7 @@ exports.login = [ } ] -exports.logout = async (req, res) => { +export async function logout(req, res) { try { req.session.destroy() return FetchResult.formatResult(res, HTTP_STATUS.OK, messages.user.logout) @@ -109,7 +109,7 @@ exports.logout = async (req, res) => { } } -exports.getUserExist = async (req, res) => { +export async function getUserExists(req, res) { try { const { account } = req.query @@ -118,7 +118,7 @@ exports.getUserExist = async (req, res) => { if (!exist) { return FetchResult.formatResult(res, HTTP_STATUS.NOT_FOUND, messages.user.not_found) } - return FetchResult.formatResult(res, HTTP_STATUS.ACCEPTED, messages.user.exist) + return FetchResult.formatResult(res, HTTP_STATUS.ACCEPTED, messages.user.exists) } catch (err) { logger('Error checking user existence: ', err) return FetchResult.formatResult(res, HTTP_STATUS.INTERNAL_SERVER_ERROR, 'Internal server error') diff --git a/models/Search.js b/models/Search.js index 27cc3db..e9ffe57 100644 --- a/models/Search.js +++ b/models/Search.js @@ -1,4 +1,4 @@ -class SearchQuery { +export class SearchQuery { constructor({ size, page, sort, filters }) { this.size = size this.page = page @@ -26,4 +26,4 @@ class SearchResult { } } -module.exports = { SearchQuery, SearchResult } +export default { SearchQuery, SearchResult } diff --git a/package.json b/package.json index 54c163e..4d19a5e 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "express", "version": "0.0.0", "private": true, + "type": "module", "scripts": { "start": "node ./bin/www", "nodemon": "nodemon ./bin/www", diff --git a/routes/accountRouter.js b/routes/accountRouter.js index 8e1f7c4..27285e1 100644 --- a/routes/accountRouter.js +++ b/routes/accountRouter.js @@ -1,9 +1,10 @@ // routes/userRoutes.js -const express = require('express') -const userController = require('../controllers/userController') +import express from 'express' + +import userController from '../controllers/userController' const router = express.Router() router.get('/', userController.getUserExist) -module.exports = router +export default router diff --git a/routes/index.js b/routes/index.js index 92f258b..9f39dd0 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,7 +1,8 @@ -const express = require('express') -const router = express.Router() -const userController = require('../controllers/userController') +import express from 'express' +import userController from '../controllers/userController' + +const router = express.Router() router.get('/', function (req, res) { if (!req.session.views) { req.session.views = 1 @@ -15,4 +16,4 @@ router.post('/login', userController.login) router.post('/logout', userController.logout) -module.exports = router +export default router diff --git a/routes/userRouter.js b/routes/userRouter.js index 12aafb0..7fbe640 100644 --- a/routes/userRouter.js +++ b/routes/userRouter.js @@ -1,6 +1,7 @@ // routes/userRoutes.js -const express = require('express') -const userController = require('../controllers/userController') +import userController from '../controllers/userController' + +import express from 'express' const router = express.Router() @@ -8,4 +9,4 @@ router.get('/', userController.getAllUsers) router.post('/', userController.createUser) router.get('/list', userController.findUserList) -module.exports = router +export default router diff --git a/services/userService.js b/services/userService.js index 745d1f8..d111894 100644 --- a/services/userService.js +++ b/services/userService.js @@ -1,7 +1,7 @@ -const userMapper = require('../repositories/userRepository') -const logger = require('morgan') -const messages = require('../config/messages') -const { comparePassword } = require('../utils/hashUtils') +import userMapper from '../repositories/userRepository' +import logger from 'morgan' +import messages from '../config/messages' +import { comparePassword } from '../utils/hashUtils' /** * 用户登录 @@ -10,7 +10,7 @@ const { comparePassword } = require('../utils/hashUtils') * @returns {Promise} - 登录成功返回用户信息 * @throws {Error} - 如果用户不存在或密码不正确 */ -exports.login = async (account, password) => { +export async function login(account, password) { const user = await userMapper.selectUserByAccount(account) // 用户不存在 @@ -19,7 +19,7 @@ exports.login = async (account, password) => { } // 密码不匹配 - const isMatch = await comparePassword(password, user.password) + const isMatch = comparePassword(password, user.password) if (!isMatch) { throw new Error(messages.user.passwordIncorrect) } @@ -36,16 +36,16 @@ exports.login = async (account, password) => { * @param {string} account * @returns {Promise} */ -exports.getUserExists = async (account) => { +export async function getUserExists(account) { return userMapper.selectUserByAccountExist(account) } // Removed the unnecessary try-catch block and simplified the function -exports.getAllUser = async () => { +export async function getAllUser() { return await userMapper.selectAllUser() } -exports.getUserList = async (searchQuery) => { +export async function getUserList(searchQuery) { return userMapper.selectUserList(searchQuery) } @@ -55,7 +55,7 @@ exports.getUserList = async (searchQuery) => { * @returns {Promise} - 创建成功的用户信息 * @throws {Error} - 如果用户已存在或事务失败 */ -exports.createUser = async (user) => { +export async function createUser(user) { const { account } = user const session = await userMapper.startTransaction() diff --git a/utils/hashUtils.js b/utils/hashUtils.js index 5995c22..15aa4e7 100644 --- a/utils/hashUtils.js +++ b/utils/hashUtils.js @@ -1,4 +1,4 @@ -const bcrypt = require('bcrypt') +import bcrypt from 'bcrypt' /** * 加密密码 @@ -15,8 +15,8 @@ async function hashPassword(password) { * @param {string} hashedPassword 哈希密码 * @returns {boolean} 是否匹配 */ -async function comparePassword(password, hashedPassword) { +export async function comparePassword(password, hashedPassword) { return bcrypt.compare(password, hashedPassword) } -module.exports = { hashPassword, comparePassword } +export default { hashPassword, comparePassword } diff --git a/utils/loginUtil.js b/utils/loginUtil.js index 588d112..a75b8f4 100644 --- a/utils/loginUtil.js +++ b/utils/loginUtil.js @@ -1,7 +1,8 @@ -const FetchResult = require('../common/web/fetchResult.js') -const { HTTP_STATUS } = require('../common/constant/httpStatus.js') +import FetchResult from '../common/web/fetchResult.js' -exports.authenticateSession = async (req, res, next) => { +import { HTTP_STATUS } from '../common/constant/httpStatus.js' + +export async function authenticateSession(req, res, next) { if (req.session.user) { next() } else {