feat: 添加用户管理功能,包含用户查询和创建接口
This commit is contained in:
parent
172c57f85e
commit
1b1af49db3
49
app.js
49
app.js
@ -6,13 +6,10 @@ const cors = require('cors')
|
|||||||
const session = require('express-session')
|
const session = require('express-session')
|
||||||
const cookieParser = require('cookie-parser')
|
const cookieParser = require('cookie-parser')
|
||||||
const indexRouter = require('./routes/index')
|
const indexRouter = require('./routes/index')
|
||||||
|
const userRouter = require('./routes/userRouter')
|
||||||
|
|
||||||
// mongodb数据库连接
|
// mongodb数据库连接
|
||||||
const mongodbConfig = require('./db/mongodb.config')
|
const { connectMongoDB } = require('./db/mongodb.config')
|
||||||
// sqlite3数据库连接
|
|
||||||
// const sqliteConfig = require('./db/sqlite.config');
|
|
||||||
|
|
||||||
const loginUtils = require('./utils/LoginUtil')
|
|
||||||
|
|
||||||
const app = express()
|
const app = express()
|
||||||
|
|
||||||
@ -20,22 +17,6 @@ const app = express()
|
|||||||
require('dotenv').config()
|
require('dotenv').config()
|
||||||
const loginSecret = process.env.SESSION_SECRET
|
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(logger('dev'))
|
||||||
app.use(express.json())
|
app.use(express.json())
|
||||||
app.use(express.urlencoded({ extended: false }))
|
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('/', loginUtils.aopMiddleware, indexRouter);
|
||||||
app.use('/', indexRouter)
|
app.use('/', indexRouter)
|
||||||
|
app.use('/user', userRouter)
|
||||||
|
|
||||||
// catch 404 and forward to error handler
|
// catch 404 and forward to error handler
|
||||||
app.use(function (req, res, next) {
|
app.use(function (req, res, next) {
|
||||||
// next(createError(404));
|
next(createError(404))
|
||||||
})
|
})
|
||||||
|
|
||||||
// error handler
|
// error handler
|
||||||
@ -70,7 +68,12 @@ app.use(function (err, req, res, next) {
|
|||||||
|
|
||||||
// render the error page
|
// render the error page
|
||||||
res.status(err.status || 500)
|
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
|
module.exports = app
|
||||||
|
|||||||
@ -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)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
@ -1,20 +1,19 @@
|
|||||||
const expressAsyncHandler = require('express-async-handler')
|
const userService = require('../services/userService')
|
||||||
|
|
||||||
const User = require('../models/user.model')
|
exports.getAllUsers = async (req, res) => {
|
||||||
|
|
||||||
exports.user_list = expressAsyncHandler(async (req, res, next) => {
|
|
||||||
try {
|
try {
|
||||||
const list_users = await User.find()
|
const users = await userService.user_list()
|
||||||
return list_users
|
res.json(users)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
next(err)
|
res.status(500).json({ error: err.message })
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
|
|
||||||
exports.find_user_login = expressAsyncHandler(async (account) => {
|
exports.createUser = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
return await User.findOne({ account: account })
|
const user = await userService.create_user(req.body)
|
||||||
|
res.json(user)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
next(err)
|
res.status(500).json({ error: err.message })
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
|
|||||||
@ -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
|
|
||||||
}
|
|
||||||
@ -1,47 +1,55 @@
|
|||||||
const mongoose = require('mongoose')
|
const mongoose = require('mongoose')
|
||||||
|
require('dotenv').config() // 加载 .env 文件
|
||||||
|
|
||||||
// 使用环境变量存储敏感信息
|
// 使用环境变量存储敏感信息
|
||||||
const account = process.env.MONGO_ACCOUNT
|
const account = process.env.MONGO_ACCOUNT
|
||||||
const password = process.env.MONGO_PASSWORD
|
const password = process.env.MONGO_PASSWORD
|
||||||
const host = process.env.MONGO_HOST || '122.152.201.90'
|
const host = process.env.MONGO_HOST || '122.152.201.90'
|
||||||
const port = process.env.MONGO_PORT || '27017'
|
const port = process.env.MONGO_PORT || '27017'
|
||||||
const dbName = process.env.MONGO_DB_NAME || 'customer'
|
// const dbName = process.env.MONGO_DB_NAME || 'customer'
|
||||||
const authSource = process.env.MONGO_AUTH_SOURCE || 'admin'
|
|
||||||
|
|
||||||
let isConnected = false
|
let isConnected = false
|
||||||
|
|
||||||
exports.connectMongoDB = async function () {
|
exports.connectMongoDB = async function () {
|
||||||
|
console.log(account, password, host, port)
|
||||||
|
|
||||||
|
// 如果已经连接,不再重复连接
|
||||||
if (isConnected) {
|
if (isConnected) {
|
||||||
console.log('MongoDB 已经连接')
|
console.log('MongoDB 已经连接')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const mongoDBUrl = `mongodb://${account}:${password}@${host}:${port}/${dbName}`
|
try {
|
||||||
|
const mongoDBUrl = `mongodb://${account}:${password}@${host}:${port}`
|
||||||
|
|
||||||
// 连接 MongoDB
|
// 连接 MongoDB,不再需要 useNewUrlParser 和 useUnifiedTopology
|
||||||
await mongoose.connect(mongoDBUrl, {
|
await mongoose.connect(mongoDBUrl)
|
||||||
useNewUrlParser: true,
|
|
||||||
useUnifiedTopology: true
|
|
||||||
})
|
|
||||||
|
|
||||||
const db = mongoose.connection
|
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 连接初始化成功')
|
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) {
|
} catch (err) {
|
||||||
console.error('MongoDB 连接初始化失败:', err.message)
|
console.error('MongoDB 连接初始化失败:', err.message)
|
||||||
throw err
|
throw err // 重新抛出错误,以便其他地方可以处理
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,7 +8,7 @@ const UserSchema = new Schema({
|
|||||||
birth: { type: Date },
|
birth: { type: Date },
|
||||||
avatar: { type: String, maxlength: 100 },
|
avatar: { type: String, maxlength: 100 },
|
||||||
account: { type: String, required: true, unique: true, maxlength: 100, index: true },
|
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 },
|
email: { type: String, maxlength: 255, index: true },
|
||||||
phone: { type: String, maxlength: 11 },
|
phone: { type: String, maxlength: 11 },
|
||||||
register_date: { type: Date, default: Date.now },
|
register_date: { type: Date, default: Date.now },
|
||||||
@ -24,6 +24,8 @@ UserSchema.pre('save', async function (next) {
|
|||||||
const user = this
|
const user = this
|
||||||
if (!user.isModified('password')) return next()
|
if (!user.isModified('password')) return next()
|
||||||
try {
|
try {
|
||||||
|
console.log(user.password)
|
||||||
|
|
||||||
const hashedPassword = await hashPassword(user.password)
|
const hashedPassword = await hashPassword(user.password)
|
||||||
user.password = hashedPassword
|
user.password = hashedPassword
|
||||||
next()
|
next()
|
||||||
68
package-lock.json
generated
68
package-lock.json
generated
@ -8,10 +8,11 @@
|
|||||||
"name": "express",
|
"name": "express",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"bcrypt": "^5.1.1",
|
||||||
"cookie-parser": "~1.4.4",
|
"cookie-parser": "~1.4.4",
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"debug": "~2.6.9",
|
"debug": "~2.6.9",
|
||||||
"dotenv": "^16.4.5",
|
"dotenv": "^16.4.7",
|
||||||
"express": "^4.19.2",
|
"express": "^4.19.2",
|
||||||
"express-async-handler": "^1.2.0",
|
"express-async-handler": "^1.2.0",
|
||||||
"express-session": "^1.18.0",
|
"express-session": "^1.18.0",
|
||||||
@ -24,7 +25,6 @@
|
|||||||
"sqlite3": "^5.1.7"
|
"sqlite3": "^5.1.7"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"bcrypt": "^5.1.1",
|
|
||||||
"prettier": "^3.4.2"
|
"prettier": "^3.4.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -38,7 +38,6 @@
|
|||||||
"version": "1.0.11",
|
"version": "1.0.11",
|
||||||
"resolved": "https://registry.npmmirror.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz",
|
"resolved": "https://registry.npmmirror.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz",
|
||||||
"integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==",
|
"integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==",
|
||||||
"dev": true,
|
|
||||||
"license": "BSD-3-Clause",
|
"license": "BSD-3-Clause",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"detect-libc": "^2.0.0",
|
"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",
|
"resolved": "https://registry.npmmirror.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
|
||||||
"integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
|
"integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
|
||||||
"deprecated": "This package is no longer supported.",
|
"deprecated": "This package is no longer supported.",
|
||||||
"dev": true,
|
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"delegates": "^1.0.0",
|
"delegates": "^1.0.0",
|
||||||
@ -75,7 +73,6 @@
|
|||||||
"resolved": "https://registry.npmmirror.com/gauge/-/gauge-3.0.2.tgz",
|
"resolved": "https://registry.npmmirror.com/gauge/-/gauge-3.0.2.tgz",
|
||||||
"integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
|
"integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
|
||||||
"deprecated": "This package is no longer supported.",
|
"deprecated": "This package is no longer supported.",
|
||||||
"dev": true,
|
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"aproba": "^1.0.3 || ^2.0.0",
|
"aproba": "^1.0.3 || ^2.0.0",
|
||||||
@ -96,7 +93,6 @@
|
|||||||
"version": "5.0.0",
|
"version": "5.0.0",
|
||||||
"resolved": "https://registry.npmmirror.com/nopt/-/nopt-5.0.0.tgz",
|
"resolved": "https://registry.npmmirror.com/nopt/-/nopt-5.0.0.tgz",
|
||||||
"integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
|
"integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
|
||||||
"dev": true,
|
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"abbrev": "1"
|
"abbrev": "1"
|
||||||
@ -113,7 +109,6 @@
|
|||||||
"resolved": "https://registry.npmmirror.com/npmlog/-/npmlog-5.0.1.tgz",
|
"resolved": "https://registry.npmmirror.com/npmlog/-/npmlog-5.0.1.tgz",
|
||||||
"integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
|
"integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
|
||||||
"deprecated": "This package is no longer supported.",
|
"deprecated": "This package is no longer supported.",
|
||||||
"dev": true,
|
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"are-we-there-yet": "^2.0.0",
|
"are-we-there-yet": "^2.0.0",
|
||||||
@ -209,7 +204,6 @@
|
|||||||
"version": "6.0.2",
|
"version": "6.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
|
||||||
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
|
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
|
||||||
"devOptional": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"debug": "4"
|
"debug": "4"
|
||||||
},
|
},
|
||||||
@ -221,7 +215,6 @@
|
|||||||
"version": "4.3.5",
|
"version": "4.3.5",
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
|
||||||
"integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
|
"integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
|
||||||
"devOptional": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ms": "2.1.2"
|
"ms": "2.1.2"
|
||||||
},
|
},
|
||||||
@ -237,8 +230,7 @@
|
|||||||
"node_modules/agent-base/node_modules/ms": {
|
"node_modules/agent-base/node_modules/ms": {
|
||||||
"version": "2.1.2",
|
"version": "2.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
|
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||||
"devOptional": true
|
|
||||||
},
|
},
|
||||||
"node_modules/agentkeepalive": {
|
"node_modules/agentkeepalive": {
|
||||||
"version": "4.5.0",
|
"version": "4.5.0",
|
||||||
@ -269,7 +261,6 @@
|
|||||||
"version": "5.0.1",
|
"version": "5.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||||
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
||||||
"devOptional": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
@ -289,8 +280,7 @@
|
|||||||
"node_modules/aproba": {
|
"node_modules/aproba": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
|
||||||
"integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==",
|
"integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ=="
|
||||||
"devOptional": true
|
|
||||||
},
|
},
|
||||||
"node_modules/are-we-there-yet": {
|
"node_modules/are-we-there-yet": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
@ -350,7 +340,6 @@
|
|||||||
"version": "5.1.1",
|
"version": "5.1.1",
|
||||||
"resolved": "https://registry.npmmirror.com/bcrypt/-/bcrypt-5.1.1.tgz",
|
"resolved": "https://registry.npmmirror.com/bcrypt/-/bcrypt-5.1.1.tgz",
|
||||||
"integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==",
|
"integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==",
|
||||||
"dev": true,
|
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -365,7 +354,6 @@
|
|||||||
"version": "5.1.0",
|
"version": "5.1.0",
|
||||||
"resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-5.1.0.tgz",
|
"resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-5.1.0.tgz",
|
||||||
"integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==",
|
"integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/binary-extensions": {
|
"node_modules/binary-extensions": {
|
||||||
@ -644,7 +632,6 @@
|
|||||||
"version": "1.1.3",
|
"version": "1.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
|
||||||
"integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
|
"integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
|
||||||
"devOptional": true,
|
|
||||||
"bin": {
|
"bin": {
|
||||||
"color-support": "bin.js"
|
"color-support": "bin.js"
|
||||||
}
|
}
|
||||||
@ -665,8 +652,7 @@
|
|||||||
"node_modules/console-control-strings": {
|
"node_modules/console-control-strings": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
|
||||||
"integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==",
|
"integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ=="
|
||||||
"devOptional": true
|
|
||||||
},
|
},
|
||||||
"node_modules/content-disposition": {
|
"node_modules/content-disposition": {
|
||||||
"version": "0.5.4",
|
"version": "0.5.4",
|
||||||
@ -792,8 +778,7 @@
|
|||||||
"node_modules/delegates": {
|
"node_modules/delegates": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
|
||||||
"integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==",
|
"integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
|
||||||
"devOptional": true
|
|
||||||
},
|
},
|
||||||
"node_modules/depd": {
|
"node_modules/depd": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
@ -821,9 +806,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/dotenv": {
|
"node_modules/dotenv": {
|
||||||
"version": "16.4.5",
|
"version": "16.4.7",
|
||||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
|
"resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-16.4.7.tgz",
|
||||||
"integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
|
"integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==",
|
||||||
|
"license": "BSD-2-Clause",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=12"
|
"node": ">=12"
|
||||||
},
|
},
|
||||||
@ -839,8 +825,7 @@
|
|||||||
"node_modules/emoji-regex": {
|
"node_modules/emoji-regex": {
|
||||||
"version": "8.0.0",
|
"version": "8.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||||
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
|
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
|
||||||
"devOptional": true
|
|
||||||
},
|
},
|
||||||
"node_modules/encodeurl": {
|
"node_modules/encodeurl": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
@ -1216,8 +1201,7 @@
|
|||||||
"node_modules/fs.realpath": {
|
"node_modules/fs.realpath": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||||
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
|
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
|
||||||
"devOptional": true
|
|
||||||
},
|
},
|
||||||
"node_modules/fsevents": {
|
"node_modules/fsevents": {
|
||||||
"version": "2.3.3",
|
"version": "2.3.3",
|
||||||
@ -1288,7 +1272,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
|
||||||
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
|
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
|
||||||
"deprecated": "Glob versions prior to v9 are no longer supported",
|
"deprecated": "Glob versions prior to v9 are no longer supported",
|
||||||
"devOptional": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"fs.realpath": "^1.0.0",
|
"fs.realpath": "^1.0.0",
|
||||||
"inflight": "^1.0.4",
|
"inflight": "^1.0.4",
|
||||||
@ -1376,8 +1359,7 @@
|
|||||||
"node_modules/has-unicode": {
|
"node_modules/has-unicode": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
|
||||||
"integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==",
|
"integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="
|
||||||
"devOptional": true
|
|
||||||
},
|
},
|
||||||
"node_modules/hasown": {
|
"node_modules/hasown": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
@ -1451,7 +1433,6 @@
|
|||||||
"version": "5.0.1",
|
"version": "5.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
|
||||||
"integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
|
"integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
|
||||||
"devOptional": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"agent-base": "6",
|
"agent-base": "6",
|
||||||
"debug": "4"
|
"debug": "4"
|
||||||
@ -1464,7 +1445,6 @@
|
|||||||
"version": "4.3.5",
|
"version": "4.3.5",
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
|
||||||
"integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
|
"integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
|
||||||
"devOptional": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ms": "2.1.2"
|
"ms": "2.1.2"
|
||||||
},
|
},
|
||||||
@ -1480,8 +1460,7 @@
|
|||||||
"node_modules/https-proxy-agent/node_modules/ms": {
|
"node_modules/https-proxy-agent/node_modules/ms": {
|
||||||
"version": "2.1.2",
|
"version": "2.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
|
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||||
"devOptional": true
|
|
||||||
},
|
},
|
||||||
"node_modules/humanize-ms": {
|
"node_modules/humanize-ms": {
|
||||||
"version": "1.2.1",
|
"version": "1.2.1",
|
||||||
@ -1556,7 +1535,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
||||||
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
|
"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.",
|
"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": {
|
"dependencies": {
|
||||||
"once": "^1.3.0",
|
"once": "^1.3.0",
|
||||||
"wrappy": "1"
|
"wrappy": "1"
|
||||||
@ -1616,7 +1594,6 @@
|
|||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
||||||
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
|
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
|
||||||
"devOptional": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
@ -1708,7 +1685,6 @@
|
|||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz",
|
"resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz",
|
||||||
"integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
|
"integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"semver": "^6.0.0"
|
"semver": "^6.0.0"
|
||||||
@ -1724,7 +1700,6 @@
|
|||||||
"version": "6.3.1",
|
"version": "6.3.1",
|
||||||
"resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz",
|
"resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz",
|
||||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||||
"dev": true,
|
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"bin": {
|
"bin": {
|
||||||
"semver": "bin/semver.js"
|
"semver": "bin/semver.js"
|
||||||
@ -2137,7 +2112,6 @@
|
|||||||
"version": "2.7.0",
|
"version": "2.7.0",
|
||||||
"resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz",
|
"resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz",
|
||||||
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
|
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"whatwg-url": "^5.0.0"
|
"whatwg-url": "^5.0.0"
|
||||||
@ -2158,21 +2132,18 @@
|
|||||||
"version": "0.0.3",
|
"version": "0.0.3",
|
||||||
"resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz",
|
"resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz",
|
||||||
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
|
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/node-fetch/node_modules/webidl-conversions": {
|
"node_modules/node-fetch/node_modules/webidl-conversions": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
"resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
||||||
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
|
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
|
||||||
"dev": true,
|
|
||||||
"license": "BSD-2-Clause"
|
"license": "BSD-2-Clause"
|
||||||
},
|
},
|
||||||
"node_modules/node-fetch/node_modules/whatwg-url": {
|
"node_modules/node-fetch/node_modules/whatwg-url": {
|
||||||
"version": "5.0.0",
|
"version": "5.0.0",
|
||||||
"resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
"resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
||||||
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
|
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"tr46": "~0.0.3",
|
"tr46": "~0.0.3",
|
||||||
@ -2374,7 +2345,6 @@
|
|||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||||
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
|
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
|
||||||
"devOptional": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
@ -2634,7 +2604,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
|
||||||
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
|
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
|
||||||
"deprecated": "Rimraf versions prior to v4 are no longer supported",
|
"deprecated": "Rimraf versions prior to v4 are no longer supported",
|
||||||
"devOptional": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"glob": "^7.1.3"
|
"glob": "^7.1.3"
|
||||||
},
|
},
|
||||||
@ -2763,8 +2732,7 @@
|
|||||||
"node_modules/set-blocking": {
|
"node_modules/set-blocking": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
|
||||||
"integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
|
"integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
|
||||||
"devOptional": true
|
|
||||||
},
|
},
|
||||||
"node_modules/set-function-length": {
|
"node_modules/set-function-length": {
|
||||||
"version": "1.2.2",
|
"version": "1.2.2",
|
||||||
@ -2812,8 +2780,7 @@
|
|||||||
"node_modules/signal-exit": {
|
"node_modules/signal-exit": {
|
||||||
"version": "3.0.7",
|
"version": "3.0.7",
|
||||||
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
|
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
|
||||||
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
|
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
|
||||||
"devOptional": true
|
|
||||||
},
|
},
|
||||||
"node_modules/simple-concat": {
|
"node_modules/simple-concat": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
@ -3018,7 +2985,6 @@
|
|||||||
"version": "4.2.3",
|
"version": "4.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
||||||
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
||||||
"devOptional": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"emoji-regex": "^8.0.0",
|
"emoji-regex": "^8.0.0",
|
||||||
"is-fullwidth-code-point": "^3.0.0",
|
"is-fullwidth-code-point": "^3.0.0",
|
||||||
@ -3032,7 +2998,6 @@
|
|||||||
"version": "6.0.1",
|
"version": "6.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
||||||
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
||||||
"devOptional": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ansi-regex": "^5.0.1"
|
"ansi-regex": "^5.0.1"
|
||||||
},
|
},
|
||||||
@ -3308,7 +3273,6 @@
|
|||||||
"version": "1.1.5",
|
"version": "1.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
|
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
|
||||||
"integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
|
"integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
|
||||||
"devOptional": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"string-width": "^1.0.2 || 2 || 3 || 4"
|
"string-width": "^1.0.2 || 2 || 3 || 4"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,10 +7,11 @@
|
|||||||
"nodemon": "nodemon ./bin/www"
|
"nodemon": "nodemon ./bin/www"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"bcrypt": "^5.1.1",
|
||||||
"cookie-parser": "~1.4.4",
|
"cookie-parser": "~1.4.4",
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"debug": "~2.6.9",
|
"debug": "~2.6.9",
|
||||||
"dotenv": "^16.4.5",
|
"dotenv": "^16.4.7",
|
||||||
"express": "^4.19.2",
|
"express": "^4.19.2",
|
||||||
"express-async-handler": "^1.2.0",
|
"express-async-handler": "^1.2.0",
|
||||||
"express-session": "^1.18.0",
|
"express-session": "^1.18.0",
|
||||||
@ -23,7 +24,6 @@
|
|||||||
"sqlite3": "^5.1.7"
|
"sqlite3": "^5.1.7"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"bcrypt": "^5.1.1",
|
|
||||||
"prettier": "^3.4.2"
|
"prettier": "^3.4.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
9
repositories/userRepository.js
Normal file
9
repositories/userRepository.js
Normal file
@ -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)
|
||||||
|
}
|
||||||
@ -1,83 +1,4 @@
|
|||||||
var express = require('express')
|
var express = require('express')
|
||||||
var router = express.Router()
|
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
|
module.exports = router
|
||||||
|
|||||||
10
routes/userRouter.js
Normal file
10
routes/userRouter.js
Normal file
@ -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
|
||||||
@ -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
|
|
||||||
}
|
|
||||||
19
services/userService.js
Normal file
19
services/userService.js
Normal file
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user