Compare commits
2 Commits
uml-fronte
...
uml-backen
Author | SHA1 | Date |
---|---|---|
|
acdf1bd1e9 | 3 months ago |
|
d9bdac19a6 | 3 months ago |
@ -0,0 +1,5 @@
|
||||
DB_NAME = "uml"
|
||||
DB_USER = "root"
|
||||
DB_PASSWORD = "123456"
|
||||
DB_HOST = "localhost"
|
||||
JWT_SECRET = "PJH"
|
@ -0,0 +1,24 @@
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
lerna-debug.log*
|
||||
|
||||
node_modules
|
||||
dist
|
||||
dist-ssr
|
||||
*.local
|
||||
|
||||
# Editor directories and files
|
||||
.vscode/*
|
||||
!.vscode/extensions.json
|
||||
.idea
|
||||
.DS_Store
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
@ -0,0 +1,57 @@
|
||||
var createError = require('http-errors');
|
||||
var express = require('express');
|
||||
var path = require('path');
|
||||
var cookieParser = require('cookie-parser');
|
||||
var logger = require('morgan');
|
||||
const cors = require('cors');
|
||||
|
||||
//优先读取环境变量
|
||||
require("dotenv").config()
|
||||
|
||||
//引入数据库连接
|
||||
require("./dao/db")
|
||||
|
||||
//引入路由
|
||||
const userRouter = require('./routes/user');
|
||||
const expressRouter = require("./routes/express")
|
||||
|
||||
var app = express();
|
||||
|
||||
//配置cors
|
||||
const corsOptions = {
|
||||
allowedHeaders: ['Content-Type', 'Authorization'],
|
||||
exposedHeaders: ['Authentication', 'X-Custom-Header'],
|
||||
credentials: true,
|
||||
}
|
||||
//为所有源跨域
|
||||
app.use(cors(corsOptions))
|
||||
//使用各种中间件
|
||||
app.use(logger('dev'));
|
||||
app.use(express.json());
|
||||
app.use(express.urlencoded({
|
||||
extended: false
|
||||
}));
|
||||
app.use(cookieParser());
|
||||
app.use(express.static(path.join(__dirname, 'public')));
|
||||
|
||||
//使用路由中间件
|
||||
app.use('/user', userRouter);
|
||||
app.use("/express", expressRouter)
|
||||
|
||||
// catch 404 and forward to error handler
|
||||
app.use(function (req, res, next) {
|
||||
next(createError(404));
|
||||
});
|
||||
|
||||
// 错误捕获
|
||||
app.use(function (err, req, res, next) {
|
||||
// set locals, only providing error in development
|
||||
res.locals.message = err.message;
|
||||
res.locals.error = req.app.get('env') === 'development' ? err : {};
|
||||
|
||||
// render the error page
|
||||
res.status(err.status || 500);
|
||||
|
||||
});
|
||||
|
||||
module.exports = app;
|
@ -0,0 +1,91 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var app = require('../app');
|
||||
var debug = require('debug')('backend:server');
|
||||
var http = require('http');
|
||||
|
||||
/**
|
||||
* Get port from environment and store in Express.
|
||||
*/
|
||||
|
||||
var port = normalizePort(process.env.PORT || '3000');
|
||||
app.set('port', port);
|
||||
|
||||
/**
|
||||
* Create HTTP server.
|
||||
*/
|
||||
|
||||
var server = http.createServer(app);
|
||||
|
||||
/**
|
||||
* Listen on provided port, on all network interfaces.
|
||||
*/
|
||||
|
||||
server.listen(port);
|
||||
server.on('error', onError);
|
||||
server.on('listening', onListening);
|
||||
|
||||
/**
|
||||
* Normalize a port into a number, string, or false.
|
||||
*/
|
||||
|
||||
function normalizePort(val) {
|
||||
var port = parseInt(val, 10);
|
||||
|
||||
if (isNaN(port)) {
|
||||
// named pipe
|
||||
return val;
|
||||
}
|
||||
|
||||
if (port >= 0) {
|
||||
// port number
|
||||
return port;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Event listener for HTTP server "error" event.
|
||||
*/
|
||||
|
||||
function onError(error) {
|
||||
if (error.syscall !== 'listen') {
|
||||
throw error;
|
||||
}
|
||||
|
||||
var bind = typeof port === 'string' ?
|
||||
'Pipe ' + port :
|
||||
'Port ' + port;
|
||||
|
||||
// handle specific listen errors with friendly messages
|
||||
switch (error.code) {
|
||||
case 'EACCES':
|
||||
console.error(bind + ' requires elevated privileges');
|
||||
process.exit(1);
|
||||
break;
|
||||
case 'EADDRINUSE':
|
||||
console.error(bind + ' is already in use');
|
||||
process.exit(1);
|
||||
break;
|
||||
default:
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Event listener for HTTP server "listening" event.
|
||||
*/
|
||||
|
||||
function onListening() {
|
||||
var addr = server.address();
|
||||
var bind = typeof addr === 'string' ?
|
||||
'pipe ' + addr :
|
||||
'port ' + addr.port;
|
||||
debug('Listening on ' + bind);
|
||||
console.log("监听3000端口")
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
const sequelize = require("./dbConnect")
|
||||
const userModel = require("./model/userModel")
|
||||
const expressModel = require("./model/expressModel")
|
||||
const md5 = require("md5")
|
||||
const {
|
||||
getRandomExpressId
|
||||
} = require("../utils/tools")
|
||||
//将数据模型和表进行同步
|
||||
async function test() {
|
||||
await sequelize.sync({
|
||||
alter: true
|
||||
})
|
||||
|
||||
//将需要数据的表初始化
|
||||
const userCount = await userModel.count()
|
||||
if (!userCount) {
|
||||
//需要初始化
|
||||
await userModel.create({
|
||||
loginId: "test",
|
||||
loginPwd: md5("123")
|
||||
})
|
||||
|
||||
console.log("用户数据初始化完毕")
|
||||
}
|
||||
|
||||
const expressCount = await expressModel.count()
|
||||
if (!expressCount) {
|
||||
expressModel.bulkCreate([{
|
||||
expressId: getRandomExpressId(),
|
||||
senderCity: "深圳市",
|
||||
senderName: "冰凉凉1",
|
||||
receiverCity: "福州市",
|
||||
receiverName: "叶丽丽",
|
||||
isSigned: 1,
|
||||
signedTime: "2024-10-24 11:58"
|
||||
}, {
|
||||
expressId: getRandomExpressId(),
|
||||
senderCity: "深圳市",
|
||||
senderName: "冰凉凉2",
|
||||
receiverCity: "福州市",
|
||||
receiverName: "叶丽丽",
|
||||
isSigned: 1,
|
||||
signedTime: "2024-10-24 11:58"
|
||||
}, {
|
||||
expressId: getRandomExpressId(),
|
||||
senderCity: "深圳市",
|
||||
senderName: "冰凉凉3",
|
||||
receiverCity: "福州市",
|
||||
receiverName: "叶丽丽",
|
||||
isSigned: 1,
|
||||
signedTime: "2024-10-24 11:58"
|
||||
}])
|
||||
console.log("express初始化完成")
|
||||
}
|
||||
|
||||
console.log("数据库数据准备完成")
|
||||
}
|
||||
test()
|
@ -0,0 +1,12 @@
|
||||
const {
|
||||
Sequelize
|
||||
} = require("sequelize")
|
||||
|
||||
const sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASSWORD, {
|
||||
host: process.env.DB_HOST,
|
||||
dialect: "mysql",
|
||||
logging: false
|
||||
});
|
||||
|
||||
|
||||
module.exports = sequelize
|
@ -0,0 +1,30 @@
|
||||
const {
|
||||
handleArrayDaoData
|
||||
} = require("../utils/tools")
|
||||
const expressModel = require("./model/expressModel")
|
||||
module.exports.getExpressDao = async function () {
|
||||
return handleArrayDaoData(await expressModel.findAll())
|
||||
}
|
||||
module.exports.addExpressDao = async function (expData) {
|
||||
await expressModel.create(expData)
|
||||
return handleArrayDaoData(await expressModel.findAll())
|
||||
}
|
||||
|
||||
module.exports.updateExpressDao = async function (expData) {
|
||||
await expressModel.update(expData, {
|
||||
where: {
|
||||
id: expData.id
|
||||
}
|
||||
})
|
||||
return handleArrayDaoData(await expressModel.findAll())
|
||||
}
|
||||
|
||||
module.exports.deleteExpressDao = async function (id) {
|
||||
console.log(id, "deleteId")
|
||||
await expressModel.destroy({
|
||||
where: {
|
||||
id
|
||||
}
|
||||
})
|
||||
return handleArrayDaoData(await expressModel.findAll())
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
const sequelize = require("../dbConnect")
|
||||
const {
|
||||
DataTypes
|
||||
} = require("sequelize")
|
||||
|
||||
module.exports = sequelize.define("express", {
|
||||
expressId: {
|
||||
type: DataTypes.STRING,
|
||||
allowNull: false
|
||||
},
|
||||
senderName: {
|
||||
type: DataTypes.STRING,
|
||||
allowNull: false
|
||||
},
|
||||
senderCity: {
|
||||
type: DataTypes.STRING,
|
||||
allowNull: false
|
||||
},
|
||||
receiverName: {
|
||||
type: DataTypes.STRING,
|
||||
allowNull: false
|
||||
},
|
||||
receiverCity: {
|
||||
type: DataTypes.STRING,
|
||||
allowNull: false
|
||||
},
|
||||
isSigned: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false
|
||||
},
|
||||
signedTime: DataTypes.STRING
|
||||
|
||||
}, {
|
||||
freezeTableName: true,
|
||||
createdAt: false,
|
||||
updatedAt: false,
|
||||
})
|
@ -0,0 +1,27 @@
|
||||
const sequelize = require("../dbConnect")
|
||||
const {
|
||||
DataTypes
|
||||
} = require("sequelize")
|
||||
|
||||
module.exports = sequelize.define("user", {
|
||||
loginId: {
|
||||
type: DataTypes.STRING,
|
||||
allowNull: false
|
||||
},
|
||||
loginPwd: {
|
||||
type: DataTypes.STRING,
|
||||
allowNull: false
|
||||
},
|
||||
sex: DataTypes.STRING,
|
||||
brithday: DataTypes.STRING,
|
||||
region: DataTypes.STRING,
|
||||
number: DataTypes.STRING,
|
||||
isAdmin: {
|
||||
type: DataTypes.BOOLEAN,
|
||||
defaultValue: false
|
||||
}
|
||||
}, {
|
||||
freezeTableName: true,
|
||||
createdAt: false,
|
||||
updatedAt: false,
|
||||
})
|
@ -0,0 +1,32 @@
|
||||
const userModel = require("./model/userModel")
|
||||
module.exports.loginDao = async function ({
|
||||
loginId,
|
||||
loginPwd
|
||||
}) {
|
||||
return await userModel.findOne({
|
||||
where: {
|
||||
loginId,
|
||||
loginPwd
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
module.exports.updateUserDao = async function (loginInfo) {
|
||||
return await userModel.update(loginInfo, {
|
||||
where: {
|
||||
loginId: loginInfo.loginId,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
module.exports.getUserInfoDao = async function (loginId) {
|
||||
return await userModel.findOne({
|
||||
where: {
|
||||
loginId,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
module.exports.addUserDao = async function (userInfo) {
|
||||
return await userModel.create(userInfo)
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,23 @@
|
||||
{
|
||||
"name": "backend",
|
||||
"version": "0.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"start": "nodemon -x npm run server",
|
||||
"server": "node ./bin/www"
|
||||
},
|
||||
"dependencies": {
|
||||
"cookie-parser": "~1.4.4",
|
||||
"cors": "^2.8.5",
|
||||
"debug": "~2.6.9",
|
||||
"dotenv": "^16.4.5",
|
||||
"express": "~4.16.1",
|
||||
"http-errors": "~1.6.3",
|
||||
"jade": "~1.11.0",
|
||||
"jsonwebtoken": "^9.0.2",
|
||||
"md5": "^2.3.0",
|
||||
"morgan": "~1.9.1",
|
||||
"mysql2": "^3.11.4",
|
||||
"sequelize": "^6.37.5"
|
||||
}
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
body {
|
||||
padding: 50px;
|
||||
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #00B7FF;
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
const express = require("express")
|
||||
const router = express.Router()
|
||||
const {
|
||||
getExpressServices,
|
||||
addExpressServices,
|
||||
updateExpressServices,
|
||||
deleteExpressServices
|
||||
} = require("../services/expressService")
|
||||
const {
|
||||
formatResponse
|
||||
} = require("../utils/tools")
|
||||
|
||||
router.get("/", async function (req, res, next) {
|
||||
const data = await getExpressServices()
|
||||
res.send(formatResponse(0, "", data))
|
||||
})
|
||||
|
||||
router.post("/", async function (req, res, next) {
|
||||
const data = await addExpressServices(req.body)
|
||||
res.send(formatResponse(0, "", data))
|
||||
})
|
||||
|
||||
router.put("/", async function (req, res, next) {
|
||||
const data = await updateExpressServices(req.body)
|
||||
res.send(formatResponse(0, "", data))
|
||||
})
|
||||
|
||||
router.delete("/", async function (req, res, next) {
|
||||
const data = await deleteExpressServices(req.body)
|
||||
res.send(formatResponse(0, "", data))
|
||||
})
|
||||
|
||||
module.exports = router
|
@ -0,0 +1,35 @@
|
||||
const {
|
||||
getExpressDao,
|
||||
addExpressDao,
|
||||
updateExpressDao,
|
||||
deleteExpressDao
|
||||
} = require("../dao/expressDao")
|
||||
const {
|
||||
getRandomExpressId
|
||||
} = require("../utils/tools")
|
||||
module.exports.getExpressServices = async function () {
|
||||
return await getExpressDao()
|
||||
}
|
||||
|
||||
module.exports.addExpressServices = async function (expData) {
|
||||
//获取的对象需要补充"expressId", "isSigned"
|
||||
const data = {
|
||||
expressId: getRandomExpressId(),
|
||||
isSigned: 0,
|
||||
...expData,
|
||||
}
|
||||
return await addExpressDao(data)
|
||||
}
|
||||
|
||||
module.exports.updateExpressServices = async function (expData) {
|
||||
//这里需要提供id
|
||||
return await updateExpressDao(expData)
|
||||
}
|
||||
|
||||
module.exports.deleteExpressServices = async function ({
|
||||
id
|
||||
}) {
|
||||
return await deleteExpressDao(
|
||||
id
|
||||
)
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
const md5 = require('md5');
|
||||
const {
|
||||
loginDao,
|
||||
updateUserDao,
|
||||
getUserInfoDao,
|
||||
addUserDao
|
||||
} = require("../dao/userDao")
|
||||
const jwt = require("jsonwebtoken");
|
||||
const {
|
||||
getJwtToken
|
||||
} = require('../utils/tools');
|
||||
module.exports.loginService = async function (loginInfo) {
|
||||
//将明文密码转换为加密密码
|
||||
loginInfo.loginPwd = md5(loginInfo.loginPwd);
|
||||
let userInfo = await loginDao(loginInfo)
|
||||
if (userInfo) {
|
||||
const {
|
||||
loginPwd,
|
||||
id,
|
||||
...data
|
||||
} = userInfo.dataValues
|
||||
//添加token后返回
|
||||
let token = ""
|
||||
token = getJwtToken(data)
|
||||
return {
|
||||
token,
|
||||
data
|
||||
}
|
||||
}
|
||||
return {
|
||||
data: userInfo
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.updateUserInfoService = async function (userInfo) {
|
||||
|
||||
// userInfo.loginPwd = md5(userInfo.loginPwd)
|
||||
await updateUserDao(userInfo)
|
||||
|
||||
const result = await getUserInfoDao(userInfo.loginId)
|
||||
|
||||
return result.dataValues
|
||||
}
|
||||
|
||||
module.exports.getUserInfoService = async function (loginId) {
|
||||
const data = await getUserInfoDao(loginId)
|
||||
return data.dataValues
|
||||
}
|
||||
|
||||
module.exports.addUserService = async function (userInfo) {
|
||||
userInfo.loginPwd = md5(userInfo.loginPwd)
|
||||
const data = await addUserDao(userInfo)
|
||||
return data.dataValues
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
const jwt = require("jsonwebtoken")
|
||||
const md5 = require("md5")
|
||||
|
||||
module.exports.formatResponse = function (code, msg, data) {
|
||||
return {
|
||||
code,
|
||||
msg,
|
||||
data
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.analysisToken = function (token) {
|
||||
return jwt.verify(token.split(" ")[1], md5(process.env.JWT_SECRET))
|
||||
}
|
||||
|
||||
module.exports.getJwtToken = function (payload) {
|
||||
let loginPeriod = 1; //默认记住一天
|
||||
return jwt.sign(payload, md5(process.env.JWT_SECRET), {
|
||||
expiresIn: 60 * 60 * 24 * loginPeriod
|
||||
})
|
||||
}
|
||||
|
||||
module.exports.getRandomExpressId = function () {
|
||||
return "SF" + Math.floor(Math.random() * 1000000000000)
|
||||
}
|
||||
|
||||
module.exports.handleArrayDaoData = function (arr) {
|
||||
const result = []
|
||||
// for (const item of arr) {
|
||||
// result.push(item.dataValues)
|
||||
// }
|
||||
//倒叙输出
|
||||
for (let i = arr.length - 1; i >= 0; i--) {
|
||||
result.push(arr[i].dataValues)
|
||||
}
|
||||
return result
|
||||
}
|
Loading…
Reference in new issue