第一步:在本地環境安裝MySQL
Mac 安裝 MySQL整體流程:
https://www.cnblogs.com/nickchen121/p/11145123.html
MySQL 使用命令行:
# 啟動 MySQL sudo mysql.server start sudo /usr/local/mysql/support-files/mysql.server start # 停止MySql服務: sudo /usr/local/mysql/support-files/mysql.server stop # 重啟MySql服務: sudo /usr/local/mysql/support-files/mysql.server restart # 進入 MySQL mysql -u root -p # 列出 MySQL 數據庫管理系統的數據庫列表 SHOW DATABASES; # 查看數據庫的編碼方式 show variables like 'character%';
MySQL 安裝流程注意事項:
注意一定要配置 my.cnf 文件,更改數據庫的編碼格式為utf8,否則錄入中文數據會顯示亂碼。可通過 查看數據庫的編碼方式 命令行查看數據庫的編碼格式,為以下情況正常:
第二步:安裝數據庫可視化界面操作工具
MAC環境下使用的是 sequel-pro
下載地址為 http://www.sequelpro.com/
操作教程 https://blog.csdn.net/huacha__/article/details/81662142
注意事項:創建新的數據表時,要選擇編碼格式為utf8,否則寫入的中文會變成?? 亂碼
第三步:對數據庫進行增刪改查,使用express框架
基本流程參考:
https://blog.csdn.net/hust_cxl/article/details/79929093
https://www.cnblogs.com/cth0/p/11680134.html
const express = require('express') // 引入express模塊 const mysql = require('mysql') // 引入mysql模塊 // 創建mysql實例 const connection = mysql.createConnection({ host: '127.0.0.1', // 服務器端口 user: 'root', // 用戶名稱 password: 'xiaojie520110', // 密碼 database: 'test' // 連接的數據庫 }); const app = express() // 創建express的實例 const port = 3000 // 定義監聽端口 connection.connect(); // 啟動連接數據庫 // MySQL語法,這句意思為查詢 SELECT * FROM表示查詢,test1表示查詢的數據表 const showSql = 'SELECT * FROM tets2' // MySQL語法,這句意思為增加數據 INSERT INTO表示增加,test1表示增加的數據表 (name, age, email)為數據格式 VALUES(?,?,?) 為值 const addSql = "INSERT INTO tets2 (name, age, email) VALUES (?,?,?)"; const addSqlParams = ['菜鳥', 18, 'https://c.xxrunoob.com']; // 這是想增加的數據 // 寫入數據 connection.query(addSql, addSqlParams, function (err, result) { if (err) { // 操作失敗報錯 console.log('[SELECT ERROR]:', err.message); } console.log(result); //數據庫查詢結果返回到result中 }); // 查詢數據 connection.query(showSql, function (err, result) { if (err) { // 操作失敗報錯 console.log('[SELECT ERROR]:', err.message); } console.log(result); //數據庫查詢結果返回到result中 }); // 服務器響應請求 app.get('/', (req, res) => { connection.query(showSql, function (err, result) { if (err) { // 操作失敗報錯 console.log('[SELECT ERROR]:', err.message); } console.log(result); //數據庫查詢結果返回到result中 res.send(result[0]) }); }) // 監聽3000端口 app.listen(port, () => console.log(`Example app listening on port ${port}!`)) // connection.end(); //結束連接!!!不能一直連着!!
第四步:定義請求接口,連接前端頁面
后端定義的各個接口,本質上其實就是一個路由地址。例如 https://gw.n8n8.cn/list 這個后端接口,采用的是GET請求。當前端使用AJAX對這個接口發起請求的時候,實際上是觸發后端執行對應的路由 “ /list ” 的邏輯。
對應到 express 里面,也就是觸發 express 里面定義好的路由:在本地環境進行測試,這里的域名使用的是 127.0.0.1 ,也就是指向本地
POST請求需要使用 json解析中間件(body-parser),參考鏈接 https://www.cnblogs.com/xyyl/p/11039506.html
express 例子:
const express = require('express') // 引入express模塊 const mysql = require('mysql') // 引入mysql模塊 const bodyParser = require('body-parser');/*支持post方法*/ const app = express() // 創建express的實例 const port = 3000 // 定義監聽端口 app.use(bodyParser.json());// 添加json解析 app.use(bodyParser.urlencoded({ extended: false })); // 定義連接的數據庫 const connection = mysql.createConnection({ host: '127.0.0.1', // 服務器端口 user: 'root', // 用戶名稱 password: 'xiaojie520110', // 密碼 database: 'test' // 連接的數據庫 }); // 允許接口跨域 這里指定允許所有接口跨域 app.all('*', function (req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS'); res.header("Access-Control-Allow-Headers", "X-Requested-With"); res.header('Access-Control-Allow-Headers', 'Content-Type'); next(); }); connection.connect(); // 啟動連接數據庫 // MySQL語法,這句意思為查詢 SELECT * FROM表示查詢,tets2表示查詢的數據表 const showSql = 'SELECT * FROM tets2' // 服務端響應login接口,POST請求方式 app.post('/login', function (req, res, next) { const username = req.body.name; //獲取post請求參數 const pwd = req.body.passwor; res.json({ name: username, pwd: pwd });//數據返回前端 }); // 服務器響應請求 當前端發起 /list 接口的請求后,會觸發這個邏輯 app.get('/list', (req, res) => { connection.query(showSql, function (err, result) { if (err) { // 操作失敗報錯 console.log('[SELECT ERROR]:', err.message); } res.send(result) // 將查詢結果返回給頁面 }); }) // 監聽3000端口 app.listen(port, () => console.log(`Example app listening on port ${port}!`)) // connection.end(); //結束連接!!!不能一直連着!!
前端頁面使用AJAX發起請求:
// 觸發express里定義好的 /show 路由里各個邏輯 $.get("http://127.0.0.1:3000/show", function (data, status) { console.log(data) });
第五步: 在express中定義各種接口給前端頁面調用
前端頁面接口定義:
// 增加數據 $.post("http://127.0.0.1:3000/add", { name: "新增的數據", age: 22, email: "http://www.more.com" }, function (data, status) { console.log(data) }); // 刪除數據 $.post("http://127.0.0.1:3000/delete", { id: 11, }, function (data, status) { console.log(data) }); // 更改數據 $.post("http://127.0.0.1:3000/edit", { id: 9, name: "更改數據", email: "http://www.baidu.com" }, function (data, status) { console.log(data) }); // 查詢數據 $.get("http://127.0.0.1:3000/list", function (data, status) { console.log(data) });
后端接口定義:
// 增 app.post('/add', function (req, res, next) { const name = req.body.name; const email = req.body.email; const age = req.body.age; const addSqlParams = [name, email, age]; // MySQL語法,這句意思為查詢 INSERT INTO表示新增,tets2表示查詢的數據表 (name,email,age) VALUES(?,?,?) 表示新增的字段 const addSql = 'INSERT INTO tets2(name,email,age) VALUES(?,?,?)'; connection.query(addSql, addSqlParams, function (err, result) { if (err) { console.log('[UPDATE ERROR] - ', err.message); return; } res.json(result);//數據返回結果 }); }); // 刪 app.post('/delete', function (req, res, next) { const id = req.body.id; const delSql = `DELETE FROM tets2 where id=${id}`; //數據庫代碼,tets2表中刪除id為傳入值的那一行。 connection.query(delSql, function (err, result) { if (err) { console.log('[UPDATE ERROR] - ', err.message); return; } res.json(result);//數據返回結果 }); }); // 改 app.post('/edit', function (req, res, next) { const id = req.body.id; const name = req.body.name; const email = req.body.email; const modSqlParams = [name, email, id]; // MySQL語法,這句意思為改數據 UPDATE 表示更改,tets2表示更改的數據表 SET name= ?,email = ? 表示更改name 和 email字段,WHERE Id = ? 表示更改條件 const modSql = 'UPDATE tets2 SET name= ?,email = ? WHERE Id = ?'; connection.query(modSql, modSqlParams, function (err, result) { if (err) { console.log('[UPDATE ERROR] - ', err.message); return; } res.json(result);//數據返回結果 }); }); // 查 app.get('/list', (req, res) => { // MySQL語法,這句意思為查詢 SELECT * FROM表示查詢,tets2表示查詢的數據表 const showSql = 'SELECT * FROM tets2' connection.query(showSql, function (err, result) { if (err) { // 操作失敗報錯 console.log('[SELECT ERROR]:', err.message); } res.send(result) }); })