很多小伙伴会好奇,如何从零开始实现一个完备的前后端项目,并将数据存储在 MySQL 数据库中,然后我们可以进行实时的更新,查询,修改,增长删除。
比如一个简朴的留言板系统,用户可以通过前端提交留言,后端将数据存储到 MySQL 中,再通过 API(如axios) 将数据展示在前端页面上。又大概一个视频留言系统,答应用户上传视频和评论,这些功能都需要前后端与数据库的协作。本篇博客将通过具体的例子,从基础出发,带你一步步完成从数据库搭建到前后端数据交互的全过程。
无论你是初学者照旧有一定基础的开辟者,这篇文章都能帮助你把握前后端与数据库毗连的焦点技能。 一、环境准备(具体的各环境安装细节会在下节单拎出来讲解)
在开始之前,需要确保以下环境已经准备停当:
安装 MySQL
前去 MySQL 官方网站 下载并安装 MySQL。
在安装过程中,设置一个安全的 root 用户暗码,并选择开辟者默认设置。
安装完成后,启动 MySQL 服务,使用命令行或图形界面工具(如 MySQL Workbench,博主用的是Navicat界面化工具)毗连数据库。
安装 Node.js
前去 Node.js 官方网站 下载并安装 LTS 版本。
安装完成后,在终端输入以下命令,确认安装成功:
node -v
npm -v
复制代码
安装 Vue 开辟环境
使用 Vue CLI 快速搭建项目。起首,安装 Vue CLI:
npm install -g @vue/cli
复制代码
创建一个 Vue 项目:
vue create frontend
复制代码
根据提示选择默认设置。
测试工具
推荐使用 Postman 或 curl 测试后端 API,方便调试接口。(可略)
二、创建数据库和表
登录 MySQL 打开终端,输入以下命令登录 MySQL:
mysql -u root -p
复制代码
输入暗码后进入 MySQL。固然,对于大部分伙伴来说肯定是用界面化操作最好(如navicat)
创建数据库 创建一个名为 example_db(任意)的数据库:
CREATE DATABASE example_db;
复制代码
使用数据库 切换到刚刚创建的数据库:
USE example_db;
复制代码
创建数据表 创建一个 messages 表,用于存储留言信息:
CREATE TABLE messages (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
复制代码
插入测试数据
INSERT INTO messages (username, content) VALUES ('Alice', 'Hello, this is my first message!');
INSERT INTO messages (username, content) VALUES ('Bob', 'This platform is great!');
复制代码
三、后端毗连 MySQL
我们将使用 Node.js 和 mysql2 库毗连 MySQL。
初始化项目 创建一个新的后端目录,并初始化项目:
mkdir backend && cd backend
npm init -y
复制代码
安装依靠
npm install express mysql2 cors
复制代码
创建后端代码 新建 server.js 文件,写入以下代码:
const express = require('express');
const mysql = require('mysql2');
const cors = require('cors');
const app = express();
const port = 3000;
app.use(cors());
app.use(express.json());
// 创建数据库连接
const db = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'yourpassword',
database: 'example_db'
});
// 测试数据库连接
db.connect(err => {
if (err) {
console.error('数据库连接失败:', err);
} else {
console.log('成功连接到数据库');
}
});
// 获取所有留言
app.get('/messages', (req, res) => {
db.query('SELECT * FROM messages', (err, results) => {