佳宸学习和分享笔记的地方

0%

使用node连接Mysql,简单的注册登陆demo

使用node连接Mysql,简单的注册登陆demo

初步使用,学习node过程中小笔记

创建工作区

使用cnpm 国内淘宝的一个npm镜像,速度更快

1
npm install cnpm -g --registry=https://registry.npm.taobao .org

管理员运行Cmd在工作区,初始化一些包

1
cnpm init

在启动MySQL的过程中有点小问题,官网下载的压缩包,配置老是出错,可能是跟之前安装了一些集成环境的软件有冲突,遂放弃,直接用 PHPStudy 这个集成软件

如何创建与数据库的连接

创建表,使用SQL

设ID为主键,自动递增

然后插入一条数据测试一下

1
2
3
4
5
6
7
8
CREATE TABLE IF NOT EXISTS `user_table`
(
`ID` int(8) UNSIGNED AUTO_INCREMENT primary key,
`userName` varchar(20) NOT NULL,
`passWord` varchar(20) NOT NULL
);

INSERT INTO `user_table` (`userName`,`passWord`) VALUES ('jason','afsdg')

1564126756258

引入MySQL模块,使node与数据库建立连接

1
2
3
4
5
6
7
8
const mysql = require('mysql')
let db = mysql.createConnection({
host: 'localhost', //地址
user: 'root', //用户名
password: 'root', //密码
port: '3306', //端口号
database: '数据库名'
})

简单的SQL查询

在query() 方法里直接写SQL语句,返回结果回调

1
2
3
4
5
6
7
db.query(`UPDATE user_table  SET passWord='22134' where ID=0`, (err, data) => {
if (err) {
console.log('错了', err);
} else {
console.log(data);
}
});

注册登陆demo

createConnection 创建 Mysql 连接,每执行一次 connection.query 都是一个全新的连接,会造成一个资源的极大浪费,降低性能。

`分发`、`复用`、`管理` 这些连接。
1
2
3
4
5
6
7
8
9

```javascript
let db = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'root',
port: '3306',
database: 'XXX'
})

连接数据库后,与网页建立连接,数据判断很重要

1
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
let server = http.createServer((req, res) => {
//解析URL
let { pathname, query } = url.parse(req.url, true);
let { user, pass } = query;
console.log(url.parse(req.url, true))
switch (pathname) {
//接口
case '/reg':
//校验
if (!user) {
res.write('{"err": 1, "msg": "username can\'t be null"}');
res.end();
} else if (!pass) {
res.write('{"err": 1, "msg": "password can\'t be null"}');
res.end();
} else if (!/^\w{4,16}$/.test(user)) {//控制长度,字符,防止非法SQL注入
res.write('{"err": 1, "msg": "username is invaild"}');
res.end();
} else if (/['|"]/.test(pass)) {
res.write('{"err": 1, "msg": "password is invaild"}');
res.end();
} else {
db.query(`SELECT * FROM user_table WHERE userName='${user}'`, (err, data) => {
if (err) {
res.write('{"err": 1, "msg": "database error"}');
res.end();
} else if (data.length > 0) {
res.write('{"err": 2, "msg": "this username exsits"}');
res.end();
} else {
db.query(`INSERT INTO user_table (userName,passWord) VALUES('${user}','${pass}')`, (err, data) => {
if (err) {
res.write('{"err": 2, "msg": "database error"}');
res.end();
} else {
res.write('{"err": 0, "msg": "success"}');
res.end();
}
});
}
});
}
break;
case '/login':
//校验
if (!user) {
res.write('{"err": 1, "msg": "username can\'t be null"}');
res.end();
} else if (!pass) {
res.write('{"err": 1, "msg": "password can\'t be null"}');
res.end();
} else if (!/^\w{4,16}$/.test(user)) {
res.write('{"err": 1, "msg": "username is invaild"}');
res.end();
} else if (/['|"]/.test(pass)) {
res.write('{"err": 1, "msg": "password is invaild"}');
res.end();
} else {
db.query(`SELECT * FROM user_table WHERE userName='${user}'`, (err, data) => {
if (err) {
res.write('{"err": 1, "msg": "database error"}');
res.end();
} else if (data.length == 0) {
res.write('{"err": 1, "msg": "no this user"}');
res.end();
} else if (data[0].passWord != pass) {
res.write('{"err": 1, "msg": "username or password is incorrect"}');
res.end();
} else {
res.write('{"err": 0, "msg": "success"}');
res.end();
}
});
}
break;
default:
//读取html文件
let rs = fs.createReadStream(`www${pathname}`);
let gz = zlib.createGzip();
res.setHeader('content-encoding', 'gzip');
//使用管道先压缩
rs.pipe(gz).pipe(res);
rs.on('error', err => {
res.writeHeader(404);
res.write('Not Found');
res.end();
});
}
});
server.listen(8080)

结果

随便创一个,点击注册

1564132774040
通过断点调试,查看到,query中的数据
1564132943710
数据库中存在新增用户
1564132971403