当前位置: 首页 > news >正文

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. 初始化项目
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 配置数据库连接:

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 定义用户模型:

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 定义用户相关接口:

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 作为入口文件:

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 中添加脚本:

"scripts": {"dev": "nodemon app.js"
}

运行:

npm run dev

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

使用 axios 调用后端 API:

// 安装 axios
// npm install axiosimport 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 与后端交互。

http://www.dtcms.com/a/507398.html

相关文章:

  • 企业网站怎么管理系统用idea做html网站
  • 高端建网站西部域名网
  • unbuntu重置netplan
  • Transformer架构:深度学习序列建模的革命性突破
  • Katalon AI 之StudioAssist 代理模式MCP 服务器介绍和使用
  • 网站建设与维护招投标书搜狗搜索太原运营中心怎么样
  • DeepSeek-OCR:用图像压缩文本?一种面向长上下文的新思路
  • 苏州网站设计网站呼和浩特资产评估公司
  • [优选算法专题四.前缀和——NO.30 和可被 K 整除的子数组]
  • 【论文精读】Back to Newton’s Laws:基于可微物理的视觉化敏捷飞行学习
  • 中国空间站设计在轨飞行几年WordPress自定义图床
  • 依赖管理不卡顿!Nexus+cpolar构建企业级私有仓库访问通道
  • 中国建设银行网站用户桂林网站建设服务
  • 【面试】 Java中级开发工程师面试精选:深度问题与实战解析..
  • 投资理财学习笔记
  • 在openEuler 24.03 (LTS) 上配置 Python 开发环境教程
  • Claude Skill 编写最佳实践
  • 4D毫米波雷达MIMO天线阵列布局设计
  • Agent框架
  • 网站建设 岗位职责 智联设计wordpress页面模板下载地址
  • 网站建设专项检查中国建筑招聘信息
  • ADAPT论文阅读
  • 具身智能论文阅读:Nav-R1: Reasoning and Navigation in Embodied Scenes
  • MySQL JDBC Driver URL参数配置规范
  • python基础知识2
  • 如何做织梦手机网站网站被墙301怎么做
  • 网页网站原型图占位符怎么做凡客诚品为什么失败
  • 【初识数据库】索引
  • Linux服务器编程实践59-管道通信:pipe函数创建匿名管道的方法与使用
  • 容器化安装新玩法