很多小伙伴会好奇,如何从零开始实现一个完备的前后端项目,并将数据存储在 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) => {