您的位置:首页 > 新闻 > 热点要闻 > 网站排名的优化_凡客诚品上一年度市场份额_优化排名推广教程网站_百度公司招聘官网

网站排名的优化_凡客诚品上一年度市场份额_优化排名推广教程网站_百度公司招聘官网

2025/5/10 4:54:37 来源:https://blog.csdn.net/qq_73617452/article/details/147377972  浏览:    关键词:网站排名的优化_凡客诚品上一年度市场份额_优化排名推广教程网站_百度公司招聘官网
网站排名的优化_凡客诚品上一年度市场份额_优化排名推广教程网站_百度公司招聘官网

文章目录

    • 项目背景
    • 项目简介
      • 项目部署说明
    • 技术栈
    • 项目结构详解
      • 各目录功能说明
    • 数据库连接详解
      • 1. 本项目数据库连接(Sealos 环境)
      • 2. 传统数据库连接方式
        • 2.1 本地开发环境
        • 2.2 生产环境配置
        • 2.3 数据库连接池说明
        • 2.4 常见问题解决
    • 跨域问题详解
      • 什么是跨域?
      • 解决方案
      • 跨域常见问题
    • 开发经验分享
      • 1. 安全性考虑
    • 总结

项目背景

得知需要做一个人员管理的后端,第一个想到使用springboot(毕竟上学期刚学完),在我看了一些文章后,我得知了一个云操作系统,然后就使用这个做了后端和数据库。

项目简介

这是一个基于 Node.js + Express + MySQL 开发的健身会员管理系统后端。主要功能包括会员管理、课程管理、管理员系统等。作为一个大三学生的练手项目,它涵盖了后端开发中的许多基础知识点,非常适合想要学习后端开发的同学参考。

项目部署说明

本项目使用 Sealos 进行部署,这是一个开源的云操作系统,提供了完整的云原生应用部署和管理能力。使用 Sealos 的好处是:

  1. 简单易用

    • 不需要自己搭建服务器
    • 不需要配置复杂的网络环境
    • 提供了完整的开发环境
  2. 数据库部署

    • 使用 Sealos 提供的 MySQL 服务
    • 数据库连接地址:****-db-mysql.ns-umwit6**.svc
    • 默认端口:3306
  3. 后端部署

    • 使用 Sealos 的容器服务
    • 自动配置网络和域名
    • 支持 HTTPS 访问
  4. 开发体验

    • 提供了完整的开发环境
    • 支持代码热更新
    • 可以方便地进行调试

技术栈

  • 后端框架:Node.js + Express
  • 数据库:MySQL
  • 身份认证:JWT (JSON Web Token)
  • 跨域处理:CORS
  • 数据库连接:mysql2

项目结构详解

在开始之前,我们先来了解一下这个项目的基本结构。这种结构是 Express 框架的常见组织方式,也是很多项目的基础架构:

backend/
├── config/           # 配置文件目录
│   ├── database.js   # 数据库配置
│   ├── init.sql      # 数据库初始化脚本
│   └── init-db.js    # 数据库初始化程序
├── controllers/      # 控制器目录
│   └── admin.js      # 管理员相关控制器
├── models/           # 数据模型目录
│   └── admin.js      # 管理员数据模型
├── routes/           # 路由目录
│   └── admin.js      # 管理员相关路由
├── middlewares/      # 中间件目录
│   └── auth.js       # 认证中间件
├── utils/            # 工具函数目录
│   └── logger.js     # 日志工具
├── app.js            # 应用入口文件
└── package.json      # 项目依赖配置

各目录功能说明

  1. config/:存放配置文件

    • database.js:数据库连接配置
    • init.sql:数据库表结构初始化脚本
    • init-db.js:执行数据库初始化的程序
  2. controllers/:控制器目录

    • 处理具体的业务逻辑
    • 接收请求参数
    • 调用模型层处理数据
    • 返回响应结果
  3. models/:数据模型目录

    • 定义数据结构和关系
    • 封装数据库操作
    • 处理数据验证
  4. routes/:路由目录

    • 定义 API 接口路径
    • 将请求映射到对应的控制器
    • 处理请求参数验证
  5. middlewares/:中间件目录

    • 处理请求预处理
    • 实现认证授权
    • 处理错误
  6. utils/:工具函数目录

    • 封装通用功能
    • 提供辅助函数
    • 处理日志记录

数据库连接详解

1. 本项目数据库连接(Sealos 环境)

本项目使用 Sealos 提供的 MySQL 服务,配置如下:

// config/database.js
const mysql = require('mysql2/promise');const pool = mysql.createPool({host: '****-db-mysql.ns-umwit6**.svc',  // Sealos 提供的数据库地址user: 'xxxx',                           // 数据库用户名password: 'xxxx',                       // 数据库密码database: 'fitness',                    // 数据库名port: 3306,                            // MySQL 默认端口charset: 'utf8mb4',                    // 字符集,支持中文waitForConnections: true,connectionLimit: 10
});

2. 传统数据库连接方式

如果你没有使用 Sealos,而是使用传统的数据库部署方式,可以参考以下配置:

2.1 本地开发环境
// config/database.js
const mysql = require('mysql2/promise');const pool = mysql.createPool({host: 'localhost',      // 本地数据库地址user: 'root',           // 数据库用户名password: '123456',     // 数据库密码database: 'fitness',    // 数据库名port: 3306,            // MySQL 默认端口charset: 'utf8mb4',    // 字符集,支持中文waitForConnections: true,connectionLimit: 10
});
2.2 生产环境配置

当项目要上线时,建议使用环境变量来管理数据库配置:

  1. 创建 .env 文件
# .env 文件
DB_HOST=your-database-host
DB_USER=your-database-user
DB_PASSWORD=your-database-password
DB_NAME=your-database-name
DB_PORT=3306
  1. 使用 dotenv 加载环境变量
// app.js
require('dotenv').config();
  1. 修改数据库配置
// config/database.js
const mysql = require('mysql2/promise');const pool = mysql.createPool({host: process.env.DB_HOST,user: process.env.DB_USER,password: process.env.DB_PASSWORD,database: process.env.DB_NAME,port: process.env.DB_PORT || 3306,charset: 'utf8mb4',waitForConnections: true,connectionLimit: 10
});
2.3 数据库连接池说明

使用连接池的好处:

  1. 减少连接创建和销毁的开销
  2. 控制并发连接数
  3. 自动管理连接的生命周期
  4. 提供连接复用机制
2.4 常见问题解决
  1. 连接超时

    • 检查数据库服务器是否正常运行
    • 检查防火墙设置
  2. 字符集问题

    • 确保数据库和连接都使用 utf8mb4
    • 检查表结构是否支持中文

跨域问题详解

什么是跨域?

跨域(CORS,Cross-Origin Resource Sharing)是指浏览器出于安全考虑,限制网页从一个源(域名、协议、端口)向另一个源发送请求。比如:

  • 你的前端运行在 http://localhost:3000
  • 后端运行在 http://localhost:8080,这就产生了跨域问题
  • 跨域我是在学习springboot中遇到的,前后端分离项目都需要解决这个问题

解决方案

  1. 使用 CORS 中间件
// app.js
const cors = require('cors');// 基本配置
app.use(cors());// 详细配置
const corsOptions = {origin: ['http://localhost:3000',    // 开发环境'http://***.com',    // 生产环境'https://***.com'    // 生产环境 HTTPS],methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],allowedHeaders: ['Content-Type', 'Authorization'],credentials: true,              // 允许发送 cookiesmaxAge: 86400                   // 预检请求缓存时间
};app.use(cors(corsOptions));
  1. 处理预检请求(OPTIONS)
// 在路由中处理 OPTIONS 请求
app.options('*', cors(corsOptions));
  1. 设置响应头
// 手动设置响应头
app.use((req, res, next) => {res.header('Access-Control-Allow-Origin', '*');res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');res.header('Access-Control-Allow-Credentials', 'true');next();
});

跨域常见问题

  1. 预检请求失败

    • 原因:服务器没有正确处理 OPTIONS 请求
    • 解决:确保服务器正确配置了 CORS 中间件
  2. 凭证(cookies)无法发送

    • 原因:credentials: trueorigin: '*'
    • 解决:指定具体的域名,不能使用通配符
  3. 自定义请求头被拦截

    • 原因:没有在 allowedHeaders 中声明
    • 解决:添加需要的请求头到配置中
  4. 复杂请求被拦截

    • 原因:没有在 methods 中声明请求方法
    • 解决:添加需要的 HTTP 方法到配置中

开发经验分享

1. 安全性考虑

作为一个学生项目,我也考虑了一些基本的安全措施:

  • 密码加密存储
  • 使用参数化查询防止 SQL 注入
  • 实现 JWT 身份验证
  • 配置 CORS 限制跨域访问

总结

通过这个项目,我学到了:

  1. 如何设计一个完整的后端系统
  2. 数据库设计和优化
  3. 用户认证和授权
  4. 错误处理和日志记录
  5. 安全性考虑

这个项目虽然不大,但涵盖了后端开发中的许多重要概念,对于想要学习后端开发的同学来说是一个很好的起点。

希望这篇文章能帮助到想要学习后端开发的同学。如果有任何问题,欢迎在评论区讨论!


作者:xuan
个人博客:https://blog.ybyq.wang
欢迎访问我的博客,获取更多技术文章和教程。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com