docs(website): 重构关于页面布局和内容
- 更新页面布局,优化导航栏和面包屑导航 - 重新组织页面内容,突出公司使命和价值观 - 添加发展历程和核心团队介绍 - 更新合作伙伴展示方式 - 调整页脚内容,增加社交媒体链接
This commit is contained in:
54
backend/src/middleware/auth.js
Normal file
54
backend/src/middleware/auth.js
Normal file
@@ -0,0 +1,54 @@
|
||||
const jwt = require('jsonwebtoken');
|
||||
const { jwtConfig } = require('../config/config');
|
||||
|
||||
// 认证中间件
|
||||
const authenticate = (req, res, next) => {
|
||||
try {
|
||||
// 从请求头获取token
|
||||
const authHeader = req.headers.authorization;
|
||||
if (!authHeader || !authHeader.startsWith('Bearer ')) {
|
||||
return res.status(401).json({
|
||||
code: 401,
|
||||
message: '未提供认证token'
|
||||
});
|
||||
}
|
||||
|
||||
const token = authHeader.split(' ')[1];
|
||||
|
||||
// 验证token
|
||||
const decoded = jwt.verify(token, jwtConfig.secret);
|
||||
req.user = decoded;
|
||||
next();
|
||||
} catch (error) {
|
||||
return res.status(401).json({
|
||||
code: 401,
|
||||
message: '无效的认证token'
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// 角色权限检查中间件
|
||||
const checkRole = (roles) => {
|
||||
return (req, res, next) => {
|
||||
if (!req.user) {
|
||||
return res.status(401).json({
|
||||
code: 401,
|
||||
message: '未认证'
|
||||
});
|
||||
}
|
||||
|
||||
if (!roles.includes(req.user.userType)) {
|
||||
return res.status(403).json({
|
||||
code: 403,
|
||||
message: '权限不足'
|
||||
});
|
||||
}
|
||||
|
||||
next();
|
||||
};
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
authenticate,
|
||||
checkRole
|
||||
};
|
||||
31
backend/src/middleware/errorHandler.js
Normal file
31
backend/src/middleware/errorHandler.js
Normal file
@@ -0,0 +1,31 @@
|
||||
const { errorResponse } = require('../utils/response');
|
||||
|
||||
// 错误处理中间件
|
||||
const errorHandler = (err, req, res, next) => {
|
||||
// 记录错误日志
|
||||
console.error(err.stack);
|
||||
|
||||
// 默认错误状态码和消息
|
||||
let statusCode = 500;
|
||||
let message = '服务器内部错误';
|
||||
|
||||
// 根据错误类型设置状态码和消息
|
||||
if (err.name === 'ValidationError') {
|
||||
statusCode = 400;
|
||||
message = '请求参数验证失败';
|
||||
} else if (err.name === 'UnauthorizedError') {
|
||||
statusCode = 401;
|
||||
message = '未授权访问';
|
||||
} else if (err.name === 'ForbiddenError') {
|
||||
statusCode = 403;
|
||||
message = '访问被拒绝';
|
||||
} else if (err.name === 'NotFoundError') {
|
||||
statusCode = 404;
|
||||
message = '资源未找到';
|
||||
}
|
||||
|
||||
// 返回错误响应
|
||||
res.status(statusCode).json(errorResponse(message, statusCode));
|
||||
};
|
||||
|
||||
module.exports = errorHandler;
|
||||
13
backend/src/middleware/healthCheck.js
Normal file
13
backend/src/middleware/healthCheck.js
Normal file
@@ -0,0 +1,13 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
|
||||
// 健康检查端点
|
||||
router.get('/health', (req, res) => {
|
||||
res.status(200).json({
|
||||
status: 'OK',
|
||||
timestamp: new Date().toISOString(),
|
||||
uptime: process.uptime()
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
36
backend/src/middleware/logger.js
Normal file
36
backend/src/middleware/logger.js
Normal file
@@ -0,0 +1,36 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const { logConfig } = require('../config/config');
|
||||
|
||||
// 创建日志目录
|
||||
const logDir = path.join(__dirname, '../../logs');
|
||||
if (!fs.existsSync(logDir)) {
|
||||
fs.mkdirSync(logDir, { recursive: true });
|
||||
}
|
||||
|
||||
// 创建日志文件流
|
||||
const logStream = fs.createWriteStream(path.join(logDir, 'app.log'), { flags: 'a' });
|
||||
|
||||
// 日志中间件
|
||||
const logger = (req, res, next) => {
|
||||
// 只在开发环境记录详细日志
|
||||
if (process.env.NODE_ENV === 'development' || logConfig.level === 'debug') {
|
||||
const logEntry = {
|
||||
timestamp: new Date().toISOString(),
|
||||
method: req.method,
|
||||
url: req.url,
|
||||
ip: req.ip,
|
||||
userAgent: req.get('User-Agent')
|
||||
};
|
||||
|
||||
// 写入日志文件
|
||||
logStream.write(JSON.stringify(logEntry) + '\n');
|
||||
|
||||
// 控制台输出
|
||||
console.log(`${logEntry.timestamp} - ${logEntry.method} ${logEntry.url} - ${logEntry.ip}`);
|
||||
}
|
||||
|
||||
next();
|
||||
};
|
||||
|
||||
module.exports = logger;
|
||||
Reference in New Issue
Block a user