node和mysql的CURD總結
導語:之前做過一個小專案,其中用到了node和mysql,現在就結合這兩者做一個使用操作總結。CURD是資料庫技術中的縮寫詞,代表建立(Create)、更新(Update)、讀取(Retrieve)和刪除(Delete)操作,用於處理資料等操作。
目錄
- 前期準備
- 實戰演練
- 方法總結
前期準備
安裝php環境
- 手動安裝
建議閱讀本部落格另一篇文章《win10手動配置php開發環境教程》
- 整合環境安裝
可以使用這幾個整合包:
PHPStudy
LNMP
XAMPP
wampserver
appserv
安裝node環境
在nodejs官網上面下載然後安裝,一步一步的安裝好了以下,查詢下那個版本。
實戰演練
本小節通過一個商品的增刪改查來展示如何使用node來連線mysql進行各種操作。
node準備
- 安裝依賴包
$ mkdir demo
$ cd demo
$ npm init
$ npm install express --save
$ npm install -g express-generator
$ npm install pm2 -g
$ npm install supervisor
- 啟動node服務
編寫啟動指令碼
// index.js const express = require('express'); const app = express(); const port = 3000; const db = require('./mysql'); app.get('/', (req, res) => { res.send('Hello,demo!'); }) app.listen(port, () => { console.log('Server is running on port ', port + '!'); })
在package.json
加入以下命令
"dev": "node index.js"
// package.json { "name": "demo", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "dev": "node index.js" }, "author": "", "license": "ISC", "dependencies": { "express": "^4.17.1", "mysql": "^2.18.1", "supervisor": "^0.12.0" } }
啟動指令碼
$ npm run start
# 或者
$ supervisor index.js
mysql準備
建立一個名叫demo
的資料庫,然後建一個名稱為goods
的資料表,接著進行如下結構的配置。
以下是具體的命令列操作方法。
- 連線資料庫
$ mysql -h 127.0.0.1 -P 3306 -u demo -p
# 輸入密碼後回車確認
Enter password:
連線成功後如下所示:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 455
Server version: 5.7.26 MySQL Community Server (GPL)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
- sql語句操作
-- 建立demo使用者
mysql> CREATE USER 'demo'@'127.0.0.1' IDENTIFIED BY 'demo123456.';
-- 建立demo資料庫
mysql> CREATE DATABASE demo;
-- 賦予使用者demo操作資料庫demo的許可權
mysql> GRANT ALL PRIVILEGES ON demo.* TO 'demo'@'127.0.0.1';
FLUSH PRIVILEGES;
-- 建立資料表
mysql> CREATE TABLE `goods` (
`id` int(11) NOT NULL COMMENT 'id',
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '名稱',
`number` int(11) NOT NULL COMMENT '數量',
`price` int(11) NOT NULL COMMENT '價格',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間'
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='商品表';
node連線mysql
- 安裝依賴包
終於到了最關鍵的一步,首先安裝mysql依賴包。回到demo
目錄下面,然後開啟命令列。
$ npm install mysql
- 編寫mysql檔案
// mysql.js
const mysql = require('mysql');
const connection = mysql.createConnection({
host: '127.0.0.1',
user: 'demo',
password: 'demo123456.',
database: 'demo'
});
connection.connect(function (err) {
if (err) {
console.error(`error connecting: ${err.stack}`);
return;
}
console.log(`Mysql is connected! 連線id: ${connection.threadId}`);
});
module.exports = db;
- 匯入mysql
引入index.js
檔案中
// index.js
const db = require('./mysql');
執行成功後的截圖:
curd操作
以下操作均在index.js
中操作。
- 查詢商品資訊
查詢需要用到的語句SELECT <欄位> FROM <表名> <查詢條件>
;
例如:
mysql> SELECT * FROM `goods`;
*
表示全部的欄位,如果你只想要查詢id和名稱,只需要寫入SELECT id,name FROM "goods"
即可。
// 查詢商品資訊
app.get('/goods', (req, res) => {
let result = {};
db.query('SELECT * FROM `goods`', function (error, results, fields) {
if (error) {
result = {
code: 101,
msg: 'get_fail',
data: {
info: "查詢失敗!"
}
}
};
result = {
code: 200,
msg: 'get_succ',
data: {
info: "查詢成功!",
list: results
}
}
res.json(result);
});
})
在位址列輸入http://localhost:3000/goods
,便可以看到查詢的資訊。
- 新增商品資訊
剛剛查詢了一下,發現裡面的商品空空如也,現在來新增幾條商品資訊。
建立需要用到的語句格式大致為INSERT INTO <表名>(<欄位1,欄位2,...>) VALUES (值1,)
;
例如:
mysql> INSERT INTO `goods`(`name`, `number`, `price`) VALUES ('香蕉', 8, 10);
注意:新增商品是post
請求,所以需要提前下載一個api介面軟體,有利於測試,比較有名的是postman
。請自行下載安裝。
接著開始進行商品的程式編寫,由於mysql建議表,欄位加反斜線,故本次mysql語句不使用模板字串,而是使用字串拼接方法。
安裝body-parser
,這個是解析前端post請求的body內容。
$ npm install body-parser
引入index.js檔案。
// index.js
// 新增商品
// 引入body-parser
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json());
app.post('/goods', (req, res) => {
let result = {};
let params = req.body;
let names = '',values = '';
for (const key in params) {
names += '`'+ key + '`,';
if (key == 'name') {
values += `"${params[key]}",`;
} else {
values += `${params[key]},`;
}
}
names = names.slice(0, names.length-1);
values = values.slice(0, values.length-1);
db.query('SELECT id FROM `goods` WHERE name= "' + params.name + '"', function (error, results, fields) {
if (error) {
result = {
code: 101,
msg: 'get_fail',
data: {
info: "查詢失敗!"
}
}
};
if (results && results.length) {
result = {
code: 200,
msg: 'get_succ',
data: {
info: "商品已存在!"
}
}
return res.json(result);
}
db.query('INSERT INTO `goods`(' + names + ') VALUES (' + values + ')', function (error, results, fields) {
if (error) {
result = {
code: 101,
msg: 'save_fail',
data: {
info: "新增失敗!"
}
}
};
result = {
code: 200,
msg: 'save_succ',
data: {
info: "新增成功!",
des: {
id: results[0].insertId
}
}
}
return res.json(result);
});
});
})
開啟postman
,輸入以下內容,然後點選send
按鈕,傳送post請求。
以下是結果截圖。
新增失敗
新增成功
再次查詢商品資訊,出現了剛剛新增的內容。
- 修改商品資訊
有時候,新增的商品資訊會有波動,那麼現在就修改以下實時變動的商品資訊屬性。
修改需要用到的語句格式大致為UPDATE <表名> SET 欄位1=值1, 欄位2=值2 <條件>
;
例如:
mysql> UPDATE `goods` SET `number` = 15, `price` = 12 WHERE `id` = 1;
下面就修改一下那個蘋果的數量為15,價格為9.9。
// 修改商品資訊
app.put('/goods', (req, res) => {
let result = {};
let params = req.body;
if (!params.id) {
return res.json({
code: 101,
msg: 'get_fail',
data: {
info: "id不能為空!"
}
})
}
db.query('SELECT id FROM `goods` WHERE `id` = ' + params.id, function (error, results, fields) {
if (error) {
result = {
code: 101,
msg: 'get_fail',
data: {
info: "查詢失敗!"
}
}
};
if (results && results.length == 0) {
result = {
code: 200,
msg: 'get_succ',
data: {
info: "商品不存在!"
}
}
return res.json(result);
}
db.query('UPDATE `goods` SET `number` = ' + params.number + ', `price` = ' + params.price + ' WHERE `id` = ' + params.id, function (error, results, fields) {
if (error) {
result = {
code: 101,
msg: 'save_fail',
data: {
info: "修改失敗!"
}
}
};
result = {
code: 200,
msg: 'save_succ',
data: {
info: "修改成功!"
}
}
return res.json(result);
});
});
})
- 刪除商品
如果商品賣完了,或者不賣了,可以下架商品,那這裡直接刪除這個商品的資訊。
刪除需要用到的語句格式大致為DELETE FROM <表名> <條件>
;
例如:
mysql> DELETE FROM `goods` WHERE `id` = 1;
下面就刪除一下那個蘋果商品。
// 刪除商品
app.delete('/goods', (req, res) => {
let result = {};
let params = req.body;
if (!params.id) {
return res.json({
code: 101,
msg: 'get_fail',
data: {
info: "id不能為空!"
}
})
}
db.query('SELECT id FROM `goods` WHERE `id` = ' + params.id, function (error, results, fields) {
if (error) {
result = {
code: 101,
msg: 'get_fail',
data: {
info: "查詢失敗!"
}
}
};
if (results && results.length == 0) {
result = {
code: 200,
msg: 'get_succ',
data: {
info: "商品不存在!"
}
}
return res.json(result);
}
db.query('DELETE FROM `goods` WHERE `id` = ' + params.id, function (error, results, fields) {
if (error) {
result = {
code: 101,
msg: 'get_fail',
data: {
info: "刪除失敗!"
}
}
};
result = {
code: 200,
msg: 'get_succ',
data: {
info: "刪除成功!"
}
}
return res.json(result);
});
});
})
以上就是比較簡單的一個商品的CURD,所列舉的例子都是比較基礎的案例。
方法總結
經過剛才的實戰,相信你對curd已經很熟悉了,下面就簡單封裝一個查詢的方法。
// simple.js
const simple = (sql, params = null) => {
var connection = mysql.createConnection(dbConfig);
return new Promise(function (resolve, reject) {
connection.connect();
console.log('Database is connected!');
connection.query(sql, params, (err, result) => {
if (err) {
reject({
code: 102,
msg: 'get_fail',
data: {
info: '查詢失敗!',
detail: {
errno: err.errno,
sqlMessage: err.sqlMessage,
sql: err.sql
}
}
});
} else {
resolve({
code: 200,
msg: 'get_succ',
data: {
info: '查詢成功!',
data: result
}
});
}
})
connection.end();
console.log('Database is disconnected!');
})
}
使用方法:
app.get('/goods/test', async (req, res) => {
let data = await simple('SELECT * FROM `goods`');
return res.json(data);
});
這裡推薦一個依賴包,這個可以生成mysql語句。
$ npm install xqsql
具體使用方法,點選地址有文件介紹。
這樣就比較方便點,也看著直觀。
好了,今天的總結就到這裡,有什麼疑問,請郵箱聯絡我。