From cfe9f92013d3f51bc8251b56c782bb6da5d4d1f0 Mon Sep 17 00:00:00 2001 From: LingandRX <56020800+LingandRX@users.noreply.github.com> Date: Mon, 23 Dec 2024 23:10:22 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=87=8D=E6=9E=84=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E5=B9=B6=E6=B7=BB=E5=8A=A0=20MongoDB=20=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 Prettier 配置文件,规范代码格式 - 重构用户控制器和 DAO 层代码,提高可读性和维护性 - 添加 MongoDB 数据库配置和连接逻辑 - 更新用户模型,使用 Mongoose Schema 定义 - 新增密码加密功能 - 删除 SQLite 相关代码和数据库文件 --- .prettierrc | 8 + controllers/userController.js | 2 +- dao/user.mapper.js | 288 +++++++++++++++++----------------- db/mongodb.config.js | 61 +++++-- db/sqlite.config.js | 17 -- express.db | Bin 40960 -> 0 bytes models/session.js | 8 - models/user.js | 18 --- models/user.model.js | 128 ++++----------- package-lock.json | 250 ++++++++++++++++++++++++++--- package.json | 4 + routes/index.js | 25 ++- 12 files changed, 473 insertions(+), 336 deletions(-) create mode 100644 .prettierrc delete mode 100644 db/sqlite.config.js delete mode 100644 express.db delete mode 100644 models/session.js delete mode 100644 models/user.js diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..912c932 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,8 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "semi": false, + "tabWidth": 2, + "singleQuote": true, + "printWidth": 100, + "trailingComma": "none" + } \ No newline at end of file diff --git a/controllers/userController.js b/controllers/userController.js index 9cd20af..4c0f301 100644 --- a/controllers/userController.js +++ b/controllers/userController.js @@ -1,6 +1,6 @@ const expressAsyncHandler = require("express-async-handler"); -const User = require("../models/user"); +const User = require("../models/user.model"); exports.user_list = expressAsyncHandler(async (req, res, next) => { try { diff --git a/dao/user.mapper.js b/dao/user.mapper.js index f448dd4..da1f99a 100644 --- a/dao/user.mapper.js +++ b/dao/user.mapper.js @@ -1,162 +1,164 @@ -const sqlite = require('../db/sqlite.config'); -const User = require("../models/user.model"); +// const sqlite = require('../db/sqlite.config') +const User = require('../models/user.model') -/** +/**` * 查询用户 - account - * @param {*} account + * @param {*} account * @returns {User} */ exports.selectByAccount = async (account) => { - let db; + 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; + 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 + * @param {*} id * @returns {User} */ exports.selectById = async (id) => { - let db; + 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; + 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 + * @param {*} name + * @returns */ exports.selectByName = async (name) => { - let db; + let db - try { - db = await sqlite.connectSqlite(); + 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); + 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; + 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); + 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 + * @param {User} _user */ exports.insertUser = async (_user) => { - let db; + let db - try { - db = await sqlite.connectSqlite(); + try { + db = await sqlite.connectSqlite() - const u = await new Promise((resolve, reject) => { - db.run('INSERT \ + 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); + [_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) } + } } /** 修改密码 @@ -164,43 +166,43 @@ exports.insertUser = async (_user) => { * @param userId */ exports.updatePassword = async (password, userId) => { - let db; + 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; + 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(); + let users = new Array() - rows.map((value, index) => { - users[index] = new User(value); - }); + rows.map((value, index) => { + users[index] = new User(value) + }) - return users; + return users } diff --git a/db/mongodb.config.js b/db/mongodb.config.js index dfae9f9..b0f66da 100644 --- a/db/mongodb.config.js +++ b/db/mongodb.config.js @@ -1,16 +1,47 @@ -const mongoose = require("mongoose"); +const mongoose = require('mongoose') -/** - * mongoose连接mongodb数据库 - * @param {String} account 数据库账号 - * @param {String} password 数据库密码 - */ -exports.connectMongoDB = function (account, password) { - // mongoose连接mongodb - const mongoDBUrl = `mongodb://${account}:${password}@47.106.93.245:27017/customapi?authSource=admin`; - mongoose.connect(mongoDBUrl); - const db = mongoose.connection; - db.on("connected", () => console.log("MongoDB 连接成功")); - db.on("error", err => console.error(err, "\nMongoDB 连接错误")); - db.on("close", () => console.log("\nMongoDB 连接关闭")); -} \ No newline at end of file +// 使用环境变量存储敏感信息 +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' + +let isConnected = false + +exports.connectMongoDB = async function () { + if (isConnected) { + console.log('MongoDB 已经连接') + return + } + + try { + const mongoDBUrl = `mongodb://${account}:${password}@${host}:${port}/${dbName}` + + // 连接 MongoDB + await mongoose.connect(mongoDBUrl, { + useNewUrlParser: true, + useUnifiedTopology: true + }) + + 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 + }) + + console.log('MongoDB 连接初始化成功') + } catch (err) { + console.error('MongoDB 连接初始化失败:', err.message) + throw err + } +} diff --git a/db/sqlite.config.js b/db/sqlite.config.js deleted file mode 100644 index 39e1420..0000000 --- a/db/sqlite.config.js +++ /dev/null @@ -1,17 +0,0 @@ -const sqlite3 = require('sqlite3').verbose(); - -exports.connectSqlite = async function () { - return new Promise((resolve, reject) => { - const db = new sqlite3.Database( - "./express.db", - sqlite3.OPEN_READWRITE, - function (err) { - if (err) { - reject(err); // Reject the promise if there's an error - } else { - resolve(db); // Resolve with the database object if successful - } - } - ); - }); -}; diff --git a/express.db b/express.db deleted file mode 100644 index af6613293099663e7bb578152c0beeedd573397f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40960 zcmeI)?Qhyf90zbyrvV(`@>C&IRdrt_s7Z?-fZ!=wN$OBELJ|U1qiF&MJPnON0!FE( zy_mWO?H|}bQ0?8M{Rex!Y0_Tq{ob!{Gwt1WXE4Lg=2nxYDbd&AV(xtR+WVe*b>pv$rhcxMQ9ggTZ;P z->Ub`foTmq+0b@H&sTM^n%^qvqGzMHDu{Hk8`j$`u~@E(`C4_aUM$mQyE@J8SBks& z%8~evezay+9uCa@xbCQ6)Y|HOXm-V?`O5Z_d}UQmr;}o>Ts)}hVtKDBmTRTbsJ8k1 zv`t&o=^yvi;;w#J&F}7esx)MF(@GyjR)HmsZAg zNAPv4&H6h5p447#(P?2DS68~d^OZGmrPFH~9agfEOgcoTtk%DbAtd+tS+;8*+4DCz z>(Fz-`oKIJn%$=9$=A&F1+Z4zb42e`+r^6OzfB zv+>P%fNOVK=JW9k8AGdQ=j--iSeNV-Pv1&I?Cms4Q*7>HhI~Vwl348f*e9`U^i}lh z=)2Ly$PbYhk=)z`tA_;w5P$##AOHafKmY;|xS|4E%K~>RLGR}!6va3`Zc37@NU|i2 zPEX~OtgffB>nT~3B~8v~Y3Xl@3QGca*NM?=DvGj^%lQV9HM-dyn-x7?6u5*dkY5yO zLz8896uaoj0`1OH!XA=k4y>G#Q&999fkxhP7)8<0mk-5mF?1WKa{hQtme{6T77hO_Mq82xwK=Z zQd&yY(&|*_oT9xT3%W1~Dob?woPdgdKy`fN*^@X5Nc*Iz61%}4BhNVUjP!^>ej`7U z@5s007xIeyOuiytl8?yCEBY>nZbJY95P$##AOHafKmY;|fB*#kbAb?lE5I(TEl2sg z0s0XZdVPdmA6pXm#5lLeHcYNmEkyV`lid7NMj~_k?a`K;6pQiq?C0!qi!4W-dMq1Z zp;fcyX04Ilsk2tWV=5P$##AOHafKmY>QUjX<2um2olgb;uL1Rwwb2tWV=5P$## zAOL}}z)iXi(-fj9NYgA$tc<7W#yHUx76?E90uX=z1Rwwb2tWV=5P$##uA;!79Icae diff --git a/models/session.js b/models/session.js deleted file mode 100644 index f096cc0..0000000 --- a/models/session.js +++ /dev/null @@ -1,8 +0,0 @@ -const mongoose = require("mongoose"); -const Schema = mongoose.Schema; - -const sessionSchema = new Schema({ - -}); - -module.exports = mongoose.Model("session", sessionSchema); \ No newline at end of file diff --git a/models/user.js b/models/user.js deleted file mode 100644 index caf3811..0000000 --- a/models/user.js +++ /dev/null @@ -1,18 +0,0 @@ -const mongoose = require("mongoose"); -const Schema = mongoose.Schema; - -const UserSchema = new Schema({ - name: { type: String, required: true, max: 100 }, - gender: { type: String, max: 20 }, - birth: { type: Date }, - avatar: { type: String, max: 100 }, - account: { type: String, required: true, max: 100 }, - password: { type: String, required: true, max: 100 }, - email: { type: String, max: 20 }, - phone: { type: String, max: 11 }, - register_date: { type: Date }, - last_login_date: { type: Date }, - status: { type: String }, -}); - -module.exports = mongoose.model("User", UserSchema); \ No newline at end of file diff --git a/models/user.model.js b/models/user.model.js index 072ae9d..ceeafc0 100644 --- a/models/user.model.js +++ b/models/user.model.js @@ -1,101 +1,35 @@ -class User { - id; - user_account; - user_name; - password; - email; - mobile; - status; - create_time; - update_time; +const mongoose = require('mongoose') +const bcrypt = require('bcrypt') +const Schema = mongoose.Schema - constructor(obj) { - Object.assign(this, obj); - } +const UserSchema = new Schema({ + name: { type: String, required: true, maxlength: 100 }, + gender: { type: String, enum: ['male', 'female', 'other'], maxlength: 20 }, + 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 }, + email: { type: String, maxlength: 255, index: true }, + phone: { type: String, maxlength: 11 }, + register_date: { type: Date, default: Date.now }, + last_login_date: { type: Date, default: Date.now }, + status: { type: String, enum: ['active', 'inactive', 'pending'], default: 'pending' } +}) - getId() { - return this._id; - } - - setId(id) { - this._id = id; - } - - getUserAccount() { - return this.user_account; - } - - setUserAccount(value) { - this.user_account = value; - } - - getUserName() { - return this.user_name; - } - - setUserName(user_name) { - this.user_name = user_name; - } - - getPassword() { - return this.password; - } - - setPassword(password) { - this.password = password; - } - - getEmail() { - return this.email; - } - - setEmail(email) { - this.email = email; - } - - getMobile() { - return this.mobile; - } - - setMobile(mobile) { - this.mobile = mobile; - } - - getStatus() { - return this.status; - } - - setStatus(status) { - this.status = status; - } - - getCreateTime() { - return this.create_time; - } - - setCreateTime(create_time) { - this.create_time = create_time; - } - - getUpdateTime() { - return this.update_time; - } - - setUpdateTime(update_time) { - this.update_time = update_time; - } - - toString() { - return '\n' + this.id + '\n' - + this.user_name + '\n' - + this.user_account + '\n' - + this.password + '\n' - + this.email + '\n' - + this.mobile + '\n' - + this.status + '\n' - + this.create_time + '\n' - + this.update_time; - } +function hashPassword(password) { + return bcrypt.hash(password, 10) } -module.exports = User; \ No newline at end of file +UserSchema.pre('save', async function (next) { + const user = this + if (!user.isModified('password')) return next() + try { + const hashedPassword = await hashPassword(user.password) + user.password = hashedPassword + next() + } catch (error) { + next(error) + } +}) + +module.exports = mongoose.model('User', UserSchema) diff --git a/package-lock.json b/package-lock.json index fd5649f..704a334 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,10 @@ "morgan": "~1.9.1", "nodemon": "^3.1.0", "sqlite3": "^5.1.7" + }, + "devDependencies": { + "bcrypt": "^5.1.1", + "prettier": "^3.4.2" } }, "node_modules/@gar/promisify": { @@ -30,6 +34,94 @@ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "optional": true }, + "node_modules/@mapbox/node-pre-gyp": { + "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", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/are-we-there-yet": { + "version": "2.0.0", + "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", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/gauge": { + "version": "3.0.2", + "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", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": { + "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" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/npmlog": { + "version": "5.0.1", + "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", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, "node_modules/@mongodb-js/saslprep": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.6.tgz", @@ -117,7 +209,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "optional": true, + "devOptional": true, "dependencies": { "debug": "4" }, @@ -129,7 +221,7 @@ "version": "4.3.5", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "optional": true, + "devOptional": true, "dependencies": { "ms": "2.1.2" }, @@ -146,7 +238,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "optional": true + "devOptional": true }, "node_modules/agentkeepalive": { "version": "4.5.0", @@ -177,7 +269,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "optional": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -198,7 +290,7 @@ "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==", - "optional": true + "devOptional": true }, "node_modules/are-we-there-yet": { "version": "3.0.1", @@ -254,6 +346,28 @@ "node": ">= 0.8" } }, + "node_modules/bcrypt": { + "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": { + "@mapbox/node-pre-gyp": "^1.0.11", + "node-addon-api": "^5.0.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/bcrypt/node_modules/node-addon-api": { + "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": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -530,7 +644,7 @@ "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==", - "optional": true, + "devOptional": true, "bin": { "color-support": "bin.js" } @@ -552,7 +666,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "optional": true + "devOptional": true }, "node_modules/content-disposition": { "version": "0.5.4", @@ -679,7 +793,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "optional": true + "devOptional": true }, "node_modules/depd": { "version": "1.1.2", @@ -726,7 +840,7 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "optional": true + "devOptional": true }, "node_modules/encodeurl": { "version": "1.0.2", @@ -1103,7 +1217,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "optional": true + "devOptional": true }, "node_modules/fsevents": { "version": "2.3.3", @@ -1174,7 +1288,7 @@ "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", - "optional": true, + "devOptional": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1263,7 +1377,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "optional": true + "devOptional": true }, "node_modules/hasown": { "version": "2.0.2", @@ -1337,7 +1451,7 @@ "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==", - "optional": true, + "devOptional": true, "dependencies": { "agent-base": "6", "debug": "4" @@ -1350,7 +1464,7 @@ "version": "4.3.5", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "optional": true, + "devOptional": true, "dependencies": { "ms": "2.1.2" }, @@ -1367,7 +1481,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "optional": true + "devOptional": true }, "node_modules/humanize-ms": { "version": "1.2.1", @@ -1442,7 +1556,7 @@ "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.", - "optional": true, + "devOptional": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -1502,7 +1616,7 @@ "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==", - "optional": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -1590,6 +1704,32 @@ "node": ">=10" } }, + "node_modules/make-dir": { + "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" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "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" + } + }, "node_modules/make-fetch-happen": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", @@ -1993,6 +2133,52 @@ "node": "^16 || ^18 || >= 20" } }, + "node_modules/node-fetch": { + "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" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "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", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/node-gyp": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", @@ -2188,7 +2374,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "optional": true, + "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -2234,6 +2420,22 @@ "node": ">=10" } }, + "node_modules/prettier": { + "version": "3.4.2", + "resolved": "https://registry.npmmirror.com/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/promise": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz", @@ -2432,7 +2634,7 @@ "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", - "optional": true, + "devOptional": true, "dependencies": { "glob": "^7.1.3" }, @@ -2562,7 +2764,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "optional": true + "devOptional": true }, "node_modules/set-function-length": { "version": "1.2.2", @@ -2611,7 +2813,7 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "optional": true + "devOptional": true }, "node_modules/simple-concat": { "version": "1.0.1", @@ -2816,7 +3018,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "optional": true, + "devOptional": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -2830,7 +3032,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "optional": true, + "devOptional": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -3106,7 +3308,7 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "optional": true, + "devOptional": true, "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } diff --git a/package.json b/package.json index 57d3a71..0dff7d0 100644 --- a/package.json +++ b/package.json @@ -21,5 +21,9 @@ "morgan": "~1.9.1", "nodemon": "^3.1.0", "sqlite3": "^5.1.7" + }, + "devDependencies": { + "bcrypt": "^5.1.1", + "prettier": "^3.4.2" } } diff --git a/routes/index.js b/routes/index.js index 3e6c98b..0f8a2b2 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,32 +1,31 @@ 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"); +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) { - // const session = req.session; - // session['key'] = 'testvalue'; - // console.log(session); - // res.setHeader('set-cookies', session['key']); res.send('test'); - // res.status('404').json({ error: 'Acess is denied' }); }); 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) { + 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; @@ -44,11 +43,11 @@ router.post('/login', async function (req, res, next) { const user = await user_controller.find_user_login(account); if (!user) { - return res.json({ ret_code: -1, ret_msg: '账号不存在' }) + return res.json({ ret_code: -1, ret_msg: '账号不存在' }); } if (user.password != password) { - return res.json({ ret_code: -1, ret_msg: '密码错误' }) + return res.json({ ret_code: -1, ret_msg: '密码错误' }); } req.session.regenerate((err) => {