From 1b1af49db325b99c92e7f836767229150e0cc11d Mon Sep 17 00:00:00 2001 From: LingandRX Date: Tue, 24 Dec 2024 22:02:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=8C=85=E5=90=AB?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=9F=A5=E8=AF=A2=E5=92=8C=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.js | 49 +++--- controllers/user.controller.js | 10 -- controllers/userController.js | 23 ++- dao/user.mapper.js | 208 ------------------------- db/mongodb.config.js | 54 ++++--- models/{user.model.js => userModel.js} | 4 +- package-lock.json | 68 ++------ package.json | 4 +- repositories/userRepository.js | 9 ++ routes/index.js | 79 ---------- routes/userRouter.js | 10 ++ service/user.service.js | 41 ----- services/userService.js | 19 +++ 13 files changed, 127 insertions(+), 451 deletions(-) delete mode 100644 controllers/user.controller.js delete mode 100644 dao/user.mapper.js rename models/{user.model.js => userModel.js} (92%) create mode 100644 repositories/userRepository.js create mode 100644 routes/userRouter.js delete mode 100644 service/user.service.js create mode 100644 services/userService.js diff --git a/app.js b/app.js index 827f811..8a41be2 100644 --- a/app.js +++ b/app.js @@ -6,13 +6,10 @@ const cors = require('cors') const session = require('express-session') const cookieParser = require('cookie-parser') const indexRouter = require('./routes/index') +const userRouter = require('./routes/userRouter') // mongodb数据库连接 -const mongodbConfig = require('./db/mongodb.config') -// sqlite3数据库连接 -// const sqliteConfig = require('./db/sqlite.config'); - -const loginUtils = require('./utils/LoginUtil') +const { connectMongoDB } = require('./db/mongodb.config') const app = express() @@ -20,22 +17,6 @@ const app = express() require('dotenv').config() const loginSecret = process.env.SESSION_SECRET -// const databaseAccount = process.env.DB_ACCOUNT; -// const databasePassword = process.env.DB_PASSWORD; -// mongodbConfig.connectMongoDB(databaseAccount, databasePassword); - -// const userMapper = require('./dao/userMapper'); - -// ( -// async () => { -// try { -// await userMapper.updatePassword('333', 7); -// } catch (error) { -// console.error(error); -// } -// } -// )(); - app.use(logger('dev')) app.use(express.json()) app.use(express.urlencoded({ extended: false })) @@ -54,12 +35,29 @@ app.use( }) ) +app.use(cors()) + +async function startServer() { + try { + await connectMongoDB() + // const port = process.env.PORT || 3000 + // app.listen(port, () => { + // console.log(`Server is running on port ${port}`) + // }) + } catch (error) { + console.error('Server error:', error) + } +} + +startServer() + // app.use('/', loginUtils.aopMiddleware, indexRouter); app.use('/', indexRouter) +app.use('/user', userRouter) // catch 404 and forward to error handler app.use(function (req, res, next) { - // next(createError(404)); + next(createError(404)) }) // error handler @@ -70,7 +68,12 @@ app.use(function (err, req, res, next) { // render the error page res.status(err.status || 500) - res.render('error') + res.json({ + error: true, + message: err.message || 'Something went wrong', + // 只在开发环境下返回堆栈信息 + ...(req.app.get('env') === 'development' ? { stack: err.stack } : {}) + }) }) module.exports = app diff --git a/controllers/user.controller.js b/controllers/user.controller.js deleted file mode 100644 index 56cbbc3..0000000 --- a/controllers/user.controller.js +++ /dev/null @@ -1,10 +0,0 @@ -const userMapper = require('../dao/userMapper') - -exports.user_list = expressAsyncHandler(async (req, res, next) => { - try { - const list_users = await userMapper.selectAllUser() - return list_users - } catch (err) { - next(err) - } -}) diff --git a/controllers/userController.js b/controllers/userController.js index a245fa8..aacf1ce 100644 --- a/controllers/userController.js +++ b/controllers/userController.js @@ -1,20 +1,19 @@ -const expressAsyncHandler = require('express-async-handler') +const userService = require('../services/userService') -const User = require('../models/user.model') - -exports.user_list = expressAsyncHandler(async (req, res, next) => { +exports.getAllUsers = async (req, res) => { try { - const list_users = await User.find() - return list_users + const users = await userService.user_list() + res.json(users) } catch (err) { - next(err) + res.status(500).json({ error: err.message }) } -}) +} -exports.find_user_login = expressAsyncHandler(async (account) => { +exports.createUser = async (req, res) => { try { - return await User.findOne({ account: account }) + const user = await userService.create_user(req.body) + res.json(user) } catch (err) { - next(err) + res.status(500).json({ error: err.message }) } -}) +} diff --git a/dao/user.mapper.js b/dao/user.mapper.js deleted file mode 100644 index da1f99a..0000000 --- a/dao/user.mapper.js +++ /dev/null @@ -1,208 +0,0 @@ -// const sqlite = require('../db/sqlite.config') -const User = require('../models/user.model') - -/**` - * 查询用户 - account - * @param {*} account - * @returns {User} - */ -exports.selectByAccount = async (account) => { - let db - - try { - db = await sqlite.connectSqlite() - const rows = await new Promise((resolve, reject) => { - db.all('SELECT * FROM USERS WHERE `USER_ACCOUNT` = ?', [account], (err, rows) => { - if (err) { - reject(err) - } else { - resolve(rows) - } - }) - }) - - return (await getUser(rows))[0] - } catch (err) { - throw err - } finally { - try { - await db.close() - } catch (error) { - throw err - } - } -} - -/** - * 查询用户 - id - * @param {*} id - * @returns {User} - */ -exports.selectById = async (id) => { - let db - - try { - db = await sqlite.connectSqlite() - const rows = await new Promise((resolve, reject) => { - db.all('SELECT * FROM USERS WHERE `id` = ?', [id], (err, rows) => { - if (err) { - reject(err) - } else { - resolve(rows) - } - }) - }) - - return await getUser(rows)[0] - } catch (err) { - throw err - } finally { - try { - await db.close() - } catch (error) { - throw err - } - } -} - -/** - * 查询用户 - name - * @param {*} name - * @returns - */ -exports.selectByName = async (name) => { - let db - - try { - db = await sqlite.connectSqlite() - - const rows = await new Promise((resolve, reject) => { - db.all('SELECT * FROM USERS WHERE = ?', [name], async function (err, rows) { - if (err) { - reject(err) - } - - resolve(rows) - }) - }) - - return await getUser(rows) - } catch (err) { - throw err - } finally { - try { - await db.close() - } catch (error) { - console.error(error) - } - } -} - -exports.selectAllUser = async () => { - let db - - try { - db = await sqlite.connectSqlite() - const rows = await new Promise((reject, resolve) => { - db.all('SELECT * FROM USERS', async function (err, rows) { - if (err) { - reject(err) - } - resolve(rows) - }) - }) - return await getUser(rows) - } catch (err) { - throw err - } finally { - try { - await db.close() - } catch (error) { - console.error(error) - } - } -} - -/** - * 新增用户 - * @param {User} _user - */ -exports.insertUser = async (_user) => { - let db - - try { - db = await sqlite.connectSqlite() - - const u = await new Promise((resolve, reject) => { - db.run( - 'INSERT \ - INTO USERS(USER_ACCOUNT, USER_NAME, PASSWORD, EMAIL, MOBILE) \ - VALUES(?, ?, ?, ?, ?)', - [_user.user_account, _user.user_name, _user.password, _user.email, _user.mobile], - async function (err) { - if (err) { - reject(err) - } - console.log(this + '-----') - resolve(this) - } - ) - }) - - console.log('新增成功', u.toString()) - } catch (error) { - throw error - } finally { - try { - await db.close() - } catch (error) { - console.error(error) - } - } -} - -/** 修改密码 - * @param password - * @param userId - */ -exports.updatePassword = async (password, userId) => { - let db - - try { - db = await sqlite.connectSqlite() - const thisUpdate = await new Promise((resolve, reject) => { - db.run( - 'UPDATE USERS SET PASSWORD = ? WHERE ID = ?;', - [password, userId], - async function (err) { - if (err) { - reject(err) - } - resolve(this) - } - ) - }) - } catch (error) { - throw error - } finally { - try { - await db.close() - } catch (error) { - throw error - } - } -} - -/** - * - * @param rows - */ -getUser = async (rows) => { - let users = new Array() - - rows.map((value, index) => { - users[index] = new User(value) - }) - - return users -} diff --git a/db/mongodb.config.js b/db/mongodb.config.js index b0f66da..c192947 100644 --- a/db/mongodb.config.js +++ b/db/mongodb.config.js @@ -1,47 +1,55 @@ const mongoose = require('mongoose') +require('dotenv').config() // 加载 .env 文件 // 使用环境变量存储敏感信息 const account = process.env.MONGO_ACCOUNT const password = process.env.MONGO_PASSWORD const host = process.env.MONGO_HOST || '122.152.201.90' const port = process.env.MONGO_PORT || '27017' -const dbName = process.env.MONGO_DB_NAME || 'customer' -const authSource = process.env.MONGO_AUTH_SOURCE || 'admin' +// const dbName = process.env.MONGO_DB_NAME || 'customer' let isConnected = false exports.connectMongoDB = async function () { + console.log(account, password, host, port) + + // 如果已经连接,不再重复连接 if (isConnected) { console.log('MongoDB 已经连接') return } try { - const mongoDBUrl = `mongodb://${account}:${password}@${host}:${port}/${dbName}` + try { + const mongoDBUrl = `mongodb://${account}:${password}@${host}:${port}` - // 连接 MongoDB - await mongoose.connect(mongoDBUrl, { - useNewUrlParser: true, - useUnifiedTopology: true - }) + // 连接 MongoDB,不再需要 useNewUrlParser 和 useUnifiedTopology + await mongoose.connect(mongoDBUrl) - const db = mongoose.connection - db.on('connected', () => { - console.log('MongoDB 连接成功') - isConnected = true - }) - db.on('error', (err) => { - console.error('MongoDB 连接错误:', err.message) - // 可以在这里添加重试逻辑 - }) - db.on('close', () => { - console.log('MongoDB 连接关闭') - isConnected = false - }) + const db = mongoose.connection - console.log('MongoDB 连接初始化成功') + db.once('open', () => { + console.log('MongoDB 连接成功') + isConnected = true + }) + + db.on('error', (err) => { + console.error('MongoDB 连接错误:', err.message) + isConnected = false + }) + + db.on('close', () => { + console.log('MongoDB 连接关闭') + isConnected = false + }) + + console.log('MongoDB 连接初始化成功') + } catch (err) { + console.error('MongoDB 连接初始化失败:', err.message) + throw err + } } catch (err) { console.error('MongoDB 连接初始化失败:', err.message) - throw err + throw err // 重新抛出错误,以便其他地方可以处理 } } diff --git a/models/user.model.js b/models/userModel.js similarity index 92% rename from models/user.model.js rename to models/userModel.js index ceeafc0..95122dd 100644 --- a/models/user.model.js +++ b/models/userModel.js @@ -8,7 +8,7 @@ const UserSchema = new Schema({ birth: { type: Date }, avatar: { type: String, maxlength: 100 }, account: { type: String, required: true, unique: true, maxlength: 100, index: true }, - password: { type: String, required: true, maxlength: 100, set: hashPassword }, + password: { type: String, required: true, maxlength: 100 }, email: { type: String, maxlength: 255, index: true }, phone: { type: String, maxlength: 11 }, register_date: { type: Date, default: Date.now }, @@ -24,6 +24,8 @@ UserSchema.pre('save', async function (next) { const user = this if (!user.isModified('password')) return next() try { + console.log(user.password) + const hashedPassword = await hashPassword(user.password) user.password = hashedPassword next() diff --git a/package-lock.json b/package-lock.json index 704a334..6889362 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,10 +8,11 @@ "name": "express", "version": "0.0.0", "dependencies": { + "bcrypt": "^5.1.1", "cookie-parser": "~1.4.4", "cors": "^2.8.5", "debug": "~2.6.9", - "dotenv": "^16.4.5", + "dotenv": "^16.4.7", "express": "^4.19.2", "express-async-handler": "^1.2.0", "express-session": "^1.18.0", @@ -24,7 +25,6 @@ "sqlite3": "^5.1.7" }, "devDependencies": { - "bcrypt": "^5.1.1", "prettier": "^3.4.2" } }, @@ -38,7 +38,6 @@ "version": "1.0.11", "resolved": "https://registry.npmmirror.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "detect-libc": "^2.0.0", @@ -60,7 +59,6 @@ "resolved": "https://registry.npmmirror.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", "deprecated": "This package is no longer supported.", - "dev": true, "license": "ISC", "dependencies": { "delegates": "^1.0.0", @@ -75,7 +73,6 @@ "resolved": "https://registry.npmmirror.com/gauge/-/gauge-3.0.2.tgz", "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", "deprecated": "This package is no longer supported.", - "dev": true, "license": "ISC", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", @@ -96,7 +93,6 @@ "version": "5.0.0", "resolved": "https://registry.npmmirror.com/nopt/-/nopt-5.0.0.tgz", "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, "license": "ISC", "dependencies": { "abbrev": "1" @@ -113,7 +109,6 @@ "resolved": "https://registry.npmmirror.com/npmlog/-/npmlog-5.0.1.tgz", "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", "deprecated": "This package is no longer supported.", - "dev": true, "license": "ISC", "dependencies": { "are-we-there-yet": "^2.0.0", @@ -209,7 +204,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "devOptional": true, "dependencies": { "debug": "4" }, @@ -221,7 +215,6 @@ "version": "4.3.5", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "devOptional": true, "dependencies": { "ms": "2.1.2" }, @@ -237,8 +230,7 @@ "node_modules/agent-base/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "devOptional": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/agentkeepalive": { "version": "4.5.0", @@ -269,7 +261,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true, "engines": { "node": ">=8" } @@ -289,8 +280,7 @@ "node_modules/aproba": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "devOptional": true + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" }, "node_modules/are-we-there-yet": { "version": "3.0.1", @@ -350,7 +340,6 @@ "version": "5.1.1", "resolved": "https://registry.npmmirror.com/bcrypt/-/bcrypt-5.1.1.tgz", "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==", - "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -365,7 +354,6 @@ "version": "5.1.0", "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-5.1.0.tgz", "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", - "dev": true, "license": "MIT" }, "node_modules/binary-extensions": { @@ -644,7 +632,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "devOptional": true, "bin": { "color-support": "bin.js" } @@ -665,8 +652,7 @@ "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "devOptional": true + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" }, "node_modules/content-disposition": { "version": "0.5.4", @@ -792,8 +778,7 @@ "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "devOptional": true + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" }, "node_modules/depd": { "version": "1.1.2", @@ -821,9 +806,10 @@ } }, "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "version": "16.4.7", + "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "license": "BSD-2-Clause", "engines": { "node": ">=12" }, @@ -839,8 +825,7 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "devOptional": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -1216,8 +1201,7 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "devOptional": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.3", @@ -1288,7 +1272,6 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", - "devOptional": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1376,8 +1359,7 @@ "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "devOptional": true + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, "node_modules/hasown": { "version": "2.0.2", @@ -1451,7 +1433,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "devOptional": true, "dependencies": { "agent-base": "6", "debug": "4" @@ -1464,7 +1445,6 @@ "version": "4.3.5", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "devOptional": true, "dependencies": { "ms": "2.1.2" }, @@ -1480,8 +1460,7 @@ "node_modules/https-proxy-agent/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "devOptional": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/humanize-ms": { "version": "1.2.1", @@ -1556,7 +1535,6 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "devOptional": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -1616,7 +1594,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "devOptional": true, "engines": { "node": ">=8" } @@ -1708,7 +1685,6 @@ "version": "3.1.0", "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, "license": "MIT", "dependencies": { "semver": "^6.0.0" @@ -1724,7 +1700,6 @@ "version": "6.3.1", "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -2137,7 +2112,6 @@ "version": "2.7.0", "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -2158,21 +2132,18 @@ "version": "0.0.3", "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true, "license": "MIT" }, "node_modules/node-fetch/node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true, "license": "BSD-2-Clause" }, "node_modules/node-fetch/node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, "license": "MIT", "dependencies": { "tr46": "~0.0.3", @@ -2374,7 +2345,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -2634,7 +2604,6 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", - "devOptional": true, "dependencies": { "glob": "^7.1.3" }, @@ -2763,8 +2732,7 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "devOptional": true + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "node_modules/set-function-length": { "version": "1.2.2", @@ -2812,8 +2780,7 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "devOptional": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/simple-concat": { "version": "1.0.1", @@ -3018,7 +2985,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "devOptional": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -3032,7 +2998,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "devOptional": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -3308,7 +3273,6 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "devOptional": true, "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } diff --git a/package.json b/package.json index 0dff7d0..837ecfb 100644 --- a/package.json +++ b/package.json @@ -7,10 +7,11 @@ "nodemon": "nodemon ./bin/www" }, "dependencies": { + "bcrypt": "^5.1.1", "cookie-parser": "~1.4.4", "cors": "^2.8.5", "debug": "~2.6.9", - "dotenv": "^16.4.5", + "dotenv": "^16.4.7", "express": "^4.19.2", "express-async-handler": "^1.2.0", "express-session": "^1.18.0", @@ -23,7 +24,6 @@ "sqlite3": "^5.1.7" }, "devDependencies": { - "bcrypt": "^5.1.1", "prettier": "^3.4.2" } } diff --git a/repositories/userRepository.js b/repositories/userRepository.js new file mode 100644 index 0000000..a00eda4 --- /dev/null +++ b/repositories/userRepository.js @@ -0,0 +1,9 @@ +const UserModel = require('../models/userModel') + +exports.selectAllUser = async () => { + return await UserModel.find() +} + +exports.createUser = async (user) => { + return await UserModel.create(user) +} diff --git a/routes/index.js b/routes/index.js index 5e948eb..00f77eb 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,83 +1,4 @@ var express = require('express') var router = express.Router() -const user_controller = require('../controllers/userController') -const User = require('../models/user.model') -const userService = require('../service/user.service') -const StringUtils = require('../utils/StringUtil') - -/* GET home page. */ -router.get('/', function (req, res, next) { - res.send('test') -}) - -router.get('/user', async function (req, res, next) { - console.log(req.session) - console.log(req.session.account) - if ( - req.session.account === null || - req.session.account === '' || - req.session.account === undefined - ) { - res.send('not login') - return - } - let us = await user_controller.user_list() - us = JSON.stringify(us) - res.send(us) -}) - -router.post('/login', async function (req, res, next) { - const body = req.body - if (!StringUtils.isNotEmpty(body)) { - return res.json({ ret_code: -1, ret_msg: '登录失败' }) - } - const { account, password } = body - - if (account === '' || account === undefined || account === null) { - return res.json({ ret_code: -1, ret_msg: '没有填写账号' }) - } - if (password === '' || password === undefined || password === null) { - return res.json({ ret_code: -1, ret_msg: '没有填写密码' }) - } - - const user = await user_controller.find_user_login(account) - if (!user) { - return res.json({ ret_code: -1, ret_msg: '账号不存在' }) - } - - if (user.password != password) { - return res.json({ ret_code: -1, ret_msg: '密码错误' }) - } - - req.session.regenerate((err) => { - if (err) { - return res.json({ ret_code: -1, ret_msg: '登录失败' }) - } - req.session.account = account - res.json({ ret_code: 0, ret_msg: '登录成功' }) - }) -}) - -router.get('/logout', async function (req, res, next) { - res.json({ ret_code: 1, ret_msg: '退出登录成功' }) -}) - -router.post('/register', async function (req, res, next) { - const body = req.body - const { account, username, password } = body - - console.log(account, username, password) - const user = new User() - user.setUserAccount(account) - user.setUserName(username) - user.setPassword(password) - // console.log(user); - let userMsg - userMsg = await userService.register(user) - console.log(userMsg.get('userMsg')) - - res.json({ ret_code: 1, ret_msg: userMsg.get('userMsg') }) -}) - module.exports = router diff --git a/routes/userRouter.js b/routes/userRouter.js new file mode 100644 index 0000000..8ae1740 --- /dev/null +++ b/routes/userRouter.js @@ -0,0 +1,10 @@ +// routes/userRoutes.js +const express = require('express') +const userController = require('../controllers/userController') + +const router = express.Router() + +router.get('/', userController.getAllUsers) +router.post('/', userController.createUser) + +module.exports = router diff --git a/service/user.service.js b/service/user.service.js deleted file mode 100644 index 319eb91..0000000 --- a/service/user.service.js +++ /dev/null @@ -1,41 +0,0 @@ -const User = require('../models/user.model') -const userMapper = require('../dao/user.mapper') -const StringUtil = require('../utils/StringUtil') - -/** - * - * @param {User} user - * @returns - */ -exports.register = async (user) => { - let messageMap = new Map() - - // console.log(user ); - const _user = user - - if (_user == null) { - throw new Error('用户参数不能为空') - } - - if (StringUtil.isNotEmpty(_user.getUserAccount)) { - messageMap.set('userMsg', '账号不能为空') - return messageMap - } - if (StringUtil.isNotEmpty(_user.getUserName)) { - messageMap.set('userMsg', '名称不能为空') - return messageMap - } - if (StringUtil.isNotEmpty(_user.getPassword)) { - messageMap.set('userMsg', '密码不能为空') - return messageMap - } - - const u = await userMapper.selectByAccount(_user.user_account) - if (u != null) { - messageMap.set('userMsg', '账户已存在') - return messageMap - } - await userMapper.insertUser(_user) - messageMap.set('userMsg', 'succuss') - return messageMap -} diff --git a/services/userService.js b/services/userService.js new file mode 100644 index 0000000..a5d32a8 --- /dev/null +++ b/services/userService.js @@ -0,0 +1,19 @@ +const userMapper = require('../repositories/userRepository') + +exports.user_list = async () => { + try { + const list_users = await userMapper.selectAllUser() + return list_users + } catch (err) { + throw err + } +} + +exports.create_user = async (user) => { + try { + const result = await userMapper.createUser(user) + return result + } catch (err) { + throw err + } +}