Node.js+Koa2+MySQL 打造前后端分离项目(视频教程)

概述

  • 使用 Node.js + Koa2 + MySQL 打造前后端分离架构是一种高效且流行的方案,下面是详细的实现步骤和核心代码示例
  • 视频教程:https://pan.quark.cn/s/063a739d40e6

一、技术栈概述

  • 后端:Node.js(运行环境)、Koa2(Web 框架)、MySQL(数据库)、Sequelize(ORM 工具,可选)
  • 前端:任意前端框架(如 Vue/React/Angular),通过 AJAX/axios 调用后端接口
  • 核心思想:后端仅提供 API 接口,前端负责页面渲染和交互,通过 HTTP 协议通信

二、后端实现步骤

1. 初始化项目
bash 复制代码
mkdir koa-mysql-demo && cd koa-mysql-demo
npm init -y
npm install koa koa-router koa-bodyparser mysql2 sequelize  # 核心依赖
npm install nodemon -D  # 开发热重载工具
2. 配置 MySQL 连接

创建 config/db.js 配置数据库连接:

javascript 复制代码
const { Sequelize } = require('sequelize');

// 初始化 Sequelize(ORM 工具,简化 SQL 操作)
const sequelize = new Sequelize(
  'your_db_name',    // 数据库名
  'root',            // 用户名
  'your_password',   // 密码
  {
    host: 'localhost',
    dialect: 'mysql',
    port: 3306,
    timezone: '+08:00'  // 时区设置(重要)
  }
);

// 测试连接
sequelize.authenticate()
  .then(() => console.log('MySQL 连接成功'))
  .catch(err => console.error('连接失败:', err));

module.exports = sequelize;
3. 定义数据模型(Model)

创建 models/user.js 定义用户模型:

javascript 复制代码
const { DataTypes } = require('sequelize');
const sequelize = require('../config/db');

// 定义 User 模型(对应数据库表 users)
const User = sequelize.define('User', {
  username: {
    type: DataTypes.STRING,
    allowNull: false,
    unique: true
  },
  password: {
    type: DataTypes.STRING,
    allowNull: false
  },
  email: {
    type: DataTypes.STRING,
    validate: {
      isEmail: true
    }
  }
}, {
  tableName: 'users',  // 显式指定表名
  timestamps: true     // 自动添加 createdAt 和 updatedAt 字段
});

// 同步模型到数据库(开发环境使用)
User.sync({ alter: true });  // 自动更新表结构

module.exports = User;
4. 编写 Koa 路由与控制器

创建 routes/user.js 定义用户相关接口:

javascript 复制代码
const Router = require('koa-router');
const router = new Router({ prefix: '/api/users' });  // 接口前缀
const User = require('../models/user');

// 1. 获取所有用户
router.get('/', async (ctx) => {
  try {
    const users = await User.findAll();
    ctx.body = {
      code: 200,
      data: users,
      message: '查询成功'
    };
  } catch (err) {
    ctx.status = 500;
    ctx.body = { code: 500, message: '服务器错误' };
  }
});

// 2. 创建用户
router.post('/', async (ctx) => {
  const { username, password, email } = ctx.request.body;
  try {
    const user = await User.create({ username, password, email });
    ctx.body = { code: 201, data: user, message: '创建成功' };
  } catch (err) {
    ctx.status = 400;
    ctx.body = { code: 400, message: '参数错误' };
  }
});

module.exports = router;
5. 初始化 Koa 应用

创建 app.js 作为入口文件:

javascript 复制代码
const Koa = require('koa');
const bodyParser = require('koa-bodyparser');
const userRouter = require('./routes/user');

const app = new Koa();

// 中间件
app.use(bodyParser());  // 解析请求体(JSON/FormData)
app.use(async (ctx, next) => {
  // 跨域处理
  ctx.set('Access-Control-Allow-Origin', '*');
  ctx.set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
  ctx.set('Access-Control-Allow-Headers', 'Content-Type');
  await next();
});

// 注册路由
app.use(userRouter.routes());
app.use(userRouter.allowedMethods());  // 处理 405/501 等错误

// 启动服务
const PORT = 3000;
app.listen(PORT, () => {
  console.log(`服务器运行在 http://localhost:${PORT}`);
});
6. 启动后端服务

package.json 中添加脚本:

json 复制代码
"scripts": {
  "dev": "nodemon app.js"
}

运行:

bash 复制代码
npm run dev

三、前端调用示例(以 Vue 为例)

使用 axios 调用后端 API:

javascript 复制代码
// 安装 axios
// npm install axios

import axios from 'axios';

// 配置基础路径
axios.defaults.baseURL = 'http://localhost:3000/api';

// 获取所有用户
async function getUsers() {
  try {
    const res = await axios.get('/users');
    console.log(res.data);  // { code: 200, data: [...], message: '查询成功' }
  } catch (err) {
    console.error(err);
  }
}

// 创建用户
async function createUser(userData) {
  try {
    const res = await axios.post('/users', userData);
    console.log(res.data);
  } catch (err) {
    console.error(err);
  }
}

四、核心注意事项

  1. 跨域处理 :通过 Koa 中间件设置 Access-Control-Allow-* 头,或使用 koa-cors 插件。
  2. 安全问题
    • 密码需加密存储(如使用 bcrypt)。
    • 接口需验证权限(如使用 koa-jwt 生成 token)。
  3. 错误处理:全局捕获异常,避免服务崩溃。
  4. 生产环境
    • 关闭 sequelize.sync() 自动同步,改用迁移工具(sequelize-cli)。
    • 使用环境变量存储敏感配置(如 dotenv)。

五、扩展方向

  • 集成 koa-static 提供静态文件服务(如图片)。
  • 使用 joizod 进行请求参数校验。
  • 实现分页、排序、筛选等高级查询功能。
  • 接入日志工具(如 winston)和监控系统。

通过以上步骤,即可快速搭建一个前后端分离的 Node.js + Koa2 + MySQL 服务,前端可独立开发并通过 API 与后端交互。

相关推荐
+VX:Fegn08953 小时前
计算机毕业设计|基于springboot + vue蛋糕店管理系统(源码+数据库+文档)
前端·数据库·vue.js·spring boot·课程设计
哈__5 小时前
KES-Operator重塑Kubernetes环境下的KES数据库集群管理
数据库·kubernetes·operator·kes
IvorySQL6 小时前
IvorySQL 5.6 发布:PG 18.6 内核升级,沙盒即开即用
数据库·人工智能·postgresql
CNSSIRD数据库7 小时前
中国企业环境信用数据库2003-2026
大数据·数据库·数据分析·论文笔记
fd32007 小时前
达梦数据库更新统计信息后仍走旧执行计划解决方案
数据库
光影少年7 小时前
Express 中间件原理
后端·node.js·express
百万蹄蹄向前冲8 小时前
密码都对Node.js却连不上Linux数据库
linux·mysql
时速GEO系统8 小时前
初元 AI V1.1 版本升级,首个正式版发布一周・实现生成、部署、上线、优化全流程自动化闭环
人工智能·数据挖掘·node.js
华章酱8 小时前
MySQL幻读是怎么出现的
数据库·mysql·幻读