《校园生活平台从 0 到 1 的搭建》第二篇:搭建后端基础框架

57 阅读2分钟

🎯 一、实现目标

  • 🏗️ 搭建基于 Node.js + Express 的校园生活平台后端基础框架
  • 🗃️ 使用 MySQL 连接池管理数据库连接
  • ⚙️ 通过 .env 管理环境变量,实现配置解耦
  • 🛣️ 实现路由分组规范,方便后续功能模块扩展
  • 📦 封装统一接口返回格式,规范前后端交互数据结构
  • ❌ 实现通用错误处理中间件,保证服务稳定与统一错误响应
  • 🧪 提供示例接口验证项目架构是否正常运行

🚧 二、实现步骤概览

1. 📦 初始化项目与安装依赖

mkdir platform_serve && cd platform_serve
npm init -y
npm install express mysql dotenv cors

2. 📂 创建目录结构

platform_serve/
├── 🚀 app.js                     # 项目入口
├── ⚙️ .env                       # 环境变量配置
├── 📁 config/
│   ├── ⚙️ config.js              # 读取环境变量配置
│   └── 🗃️ db.js                  # 数据库连接池配置
├── 📁 controllers/
│   └── 🎮 exampleController.js   # 示例接口控制器
├── 📁 middleware/
│   └── 🛡️ errorHandler.js        # 通用错误处理中间件
├── 📁 routes/
│   └── 🛣️ example.js             # 示例路由分组
└── 📁 utils/
    └── 📦 response.js            # 统一接口返回格式封装

3. ⚙️ 配置 .env 文件

写入数据库及服务端口相关配置,方便环境切换:

PORT=3000
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=root
DB_NAME=school_life_platform

4. 📝 编写配置文件与数据库连接

⚙️ config/config.js 负责读取环境变量

require('dotenv').config();
module.exports = {
  PORT: process.env.PORT || 3000,
  DB_HOST: process.env.DB_HOST,
  DB_USER: process.env.DB_USER,
  DB_PASSWORD: process.env.DB_PASSWORD,
  DB_NAME: process.env.DB_NAME,
};

🗃️ config/db.js 负责创建并测试 MySQL 连接池

const mysql = require('mysql');
const config = require('./config');

const pool = mysql.createPool({
  host: config.DB_HOST,
  user: config.DB_USER,
  password: config.DB_PASSWORD,
  database: config.DB_NAME,
  port: 3306,
});

pool.getConnection((err, connection) => {
  if (err) {
    console.error('❌ 数据库连接失败:', err.message);
  } else {
    console.log('✅ 数据库连接成功');
    connection.release();
  }
});

module.exports = pool;

5. 📦 编写统一接口返回格式工具

utils/response.js

exports.success = (res, data = null, message = '操作成功') => {
  res.json({
    success: true,
    message,
    data,
  });
};

exports.fail = (res, message = '操作失败', data = null, statusCode = 400) => {
  res.status(statusCode).json({
    success: false,
    message,
    data,
  });
};

6. 🎮 编写示例控制器 controllers/exampleController.js

const { success, fail } = require('../utils/response');

exports.hello = (req, res) => {
  try {
    success(res, null, '校园生活平台后端已运行!');
  } catch (err) {
    fail(res, '服务器错误');
  }
};

7. 🛣️ 设计路由分组 routes/example.js

const express = require('express');
const router = express.Router();
const exampleController = require('../controllers/exampleController');

router.get('/hello', exampleController.hello);

module.exports = router;

8. 🛡️ 编写通用错误处理中间件 middleware/errorHandler.js

module.exports = (err, req, res, next) => {
  console.error(err.stack);
  res.status(500).json({
    success: false,
    message: '服务器内部错误',
    error: err.message || '未知错误',
  });
};

9. 🚀 编写项目入口 app.js

const express = require('express');
const cors = require('cors');
const config = require('./config/config');
const exampleRoutes = require('./routes/example');
const errorHandler = require('./middleware/errorHandler');
require('./config/db');

const app = express();
app.use(cors());
app.use(express.json());

// 路由分组挂载
app.use('/api/example', exampleRoutes);

// 404 处理
app.use((req, res) => {
  res.status(404).json({
    success: false,
    message: '接口不存在',
  });
});

// 通用错误处理中间件
app.use(errorHandler);

app.listen(config.PORT, () => {
  console.log(`🚀 服务器已启动:http://localhost:${config.PORT}`);
});

🚀 三、启动与测试

▶️ 启动服务

node app.js

🌐 访问测试接口

打开浏览器或使用 Postman 等工具访问:

GET http://localhost:3000/api/example/hello

✅ 预期响应结果

{
  "success": true,
  "message": "校园生活平台后端已运行!",
  "data": null
}