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 与后端交互。

相关推荐
xiaoxue..18 小时前
深入理解 JavaScript 异步编程:从单线程到 Promise 的完整指南
前端·javascript·面试·node.js
hoiii18718 小时前
设置Redis在CentOS7上的自启动配置
数据库·redis·缓存
爬山算法18 小时前
Redis(122)Redis的版本更新如何进行?
数据库·redis·bootstrap
一 乐19 小时前
游戏助手|游戏攻略|基于SprinBoot+vue的游戏攻略系统小程序(源码+数据库+文档)
数据库·vue.js·spring boot·后端·游戏·小程序
kka杰19 小时前
MYSQL结构操作DDL指令1.数据库操作
数据库·mysql
TDengine (老段)19 小时前
TDengine 字符串函数 POSITION 用户手册
android·java·大数据·数据库·物联网·时序数据库·tdengine
wudl556619 小时前
Flink20 SQL 窗口函数概述
服务器·数据库·sql
Arva .19 小时前
MySQL 中的 MVCC
数据库·mysql
毕设十刻20 小时前
基于Vue的鲜花销售系统33n62(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
Boilermaker199220 小时前
【MySQL】数据目录与日志开篇
数据库·mysql