导语:之前做过一个小项目,其中用到了node和mysql,现在就结合这两者做一个使用操作总结。CURD是数据库技术中的缩写词,代表创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)操作,用于处理数据等操作。
# 目录
- 前期准备
- 实战演练
- 方法总结
# 前期准备
# 安装php环境
- 手动安装
建议阅读本博客另一篇文章《win10手动配置php开发环境教程》
- 集成环境安装
可以使用这几个集成包:
PHPStudy (opens new window)
LNMP (opens new window)
XAMPP (opens new window)
wampserver (opens new window)
appserv (opens new window)
# 安装node环境
在nodejs官网 (opens new window)上面下载然后安装,一步一步的安装好了以下,查询下那个版本。
# 实战演练
本小节通过一个商品的增删改查来展示如何使用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
2
3
4
5
6
7
- 启动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 + '!');
})
2
3
4
5
6
7
8
9
10
11
12
13
在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"
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
启动脚本
$ npm run start
# 或者
$ supervisor index.js
2
3
# mysql准备
建立一个名叫demo
的数据库,然后建一个名称为goods
的数据表,接着进行如下结构的配置。
以下是具体的命令行操作方法。
- 连接数据库
$ mysql -h 127.0.0.1 -P 3306 -u demo -p
# 输入密码后回车确认
Enter password:
2
3
连接成功后如下所示:
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>
2
3
4
5
6
7
8
9
10
11
12
13
- 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='商品表';
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 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;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- 导入mysql
引入index.js
文件中
// index.js
const db = require('./mysql');
2
运行成功后的截图:
# 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);
});
})
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
在地址栏输入http://localhost:3000/goods
,便可以看到查询的信息。
- 添加商品信息
刚刚查询了一下,发现里面的商品空空如也,现在来添加几条商品信息。
创建需要用到的语句格式大致为INSERT INTO <表名>(<字段1,字段2,...>) VALUES (值1,)
;
例如:
mysql> INSERT INTO `goods`(`name`, `number`, `price`) VALUES ('香蕉', 8, 10);
注意:添加商品是post
请求,所以需要提前下载一个api接口软件,有利于测试,比较有名的是postman
。请自行下载安装。
postman下载地址 (opens new window)
接着开始进行商品的程序编写,由于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);
});
});
})
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
打开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);
});
});
})
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
- 删除商品
如果商品卖完了,或者不卖了,可以下架商品,那这里直接删除这个商品的信息。
删除需要用到的语句格式大致为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);
});
});
})
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
以上就是比较简单的一个商品的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!');
})
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
使用方法:
app.get('/goods/test', async (req, res) => {
let data = await simple('SELECT * FROM `goods`');
return res.json(data);
});
2
3
4
这里推荐一个依赖包,这个可以生成mysql语句。
$ npm install xqsql
xqsql npm地址 (opens new window)
具体使用方法,点击地址有文档介绍。
这样就比较方便点,也看着直观。
好了,今天的总结就到这里,有什么疑问,请邮箱联系我。