feat: 重构项目并添加 MongoDB 支持

- 新增 Prettier 配置文件,规范代码格式
- 重构用户控制器和 DAO 层代码,提高可读性和维护性
- 添加 MongoDB 数据库配置和连接逻辑
- 更新用户模型,使用 Mongoose Schema 定义
- 新增密码加密功能
- 删除 SQLite 相关代码和数据库文件
This commit is contained in:
LingandRX 2024-12-23 23:10:22 +08:00
parent c2e37e0fad
commit cfe9f92013
12 changed files with 473 additions and 336 deletions

8
.prettierrc Normal file
View File

@ -0,0 +1,8 @@
{
"$schema": "https://json.schemastore.org/prettierrc",
"semi": false,
"tabWidth": 2,
"singleQuote": true,
"printWidth": 100,
"trailingComma": "none"
}

View File

@ -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 {

View File

@ -1,37 +1,37 @@
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
* @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
@ -39,31 +39,31 @@ exports.selectByAccount = async (account) => {
* @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
@ -71,56 +71,56 @@ exports.selectById = async (id) => {
* @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)
}
}
}
/**
@ -128,35 +128,37 @@ exports.selectAllUser = async () => {
* @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,31 +166,31 @@ 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
}
}
}
/**
@ -196,11 +198,11 @@ exports.updatePassword = async (password, userId) => {
* @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
}

View File

@ -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 连接关闭"));
// 使用环境变量存储敏感信息
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
}
}

View File

@ -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
}
}
);
});
};

Binary file not shown.

View File

@ -1,8 +0,0 @@
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const sessionSchema = new Schema({
});
module.exports = mongoose.Model("session", sessionSchema);

View File

@ -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);

View File

@ -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;
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)

250
package-lock.json generated
View File

@ -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"
}

View File

@ -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"
}
}

View File

@ -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) => {