node使用MySQL数据库

内容:

1.node连接数据库

2.数据库常用操作

3.数据库实例 - 用户注册、登陆

 

 

 

1.node连接数据库

(1)下载mysql模块

(2)使用mysql模块连接数据库

let db=mysql.createConnection({host, port, user, password, database});

这样连接也有缺陷:连接会一直占着数据库,别的无法在此连接结束之前连接数据库,对于此我们可以使用连接池:

1 // 连接池
2 let db = mysql.createPool(配置)

实例:

1 const mysql = require('mysql')
2 
3 // 普通连接
4 // let db = mysql.createConnection({host: 'localhost', user: 'root', password: 'root', port: 3306, database: 'node'})
5 // 连接池
6 let db = mysql.createPool({host: 'localhost', user: 'root', password: 'root', port: 3306, database: 'node'})

 

 

2.数据库常用操作

(1)node的mysql数据库操作

db.query(sql, (err, data)=>{});

1 db.query(`INSERT INTO user_table (ID, name, gender, chinese, math, english) VALUES(0, 'saf', '女', 100, 100, 100);`, function (err, data) {
2     if(err) {
3         console.log('错了', err)
4     }
5     else {
6         console.log(data)
7     }
8 })

 

(2)SQL基本使用

 1 SQL:
 2 4大查询
 3 1.增   INSERT
 4   INSERT INTO 表 (字段列表) VALUES(值列表)
 5 
 6   INSERT INTO user_table (ID, name, gender, chinese, math, english) VALUES(0, 'wyb', '', 75, 88, 69);
 7 
 8 2.删   DELETE
 9   DELETE FROMWHERE 条件
10 
11   DELETE FROM user_table WHERE ID=3;
12 
13 3.改   UPDATE
14   UPDATESET 字段=值, 字段2=值2, ... WHERE 条件
15 
16   UPDATE user_table SET chinese=100 WHERE ID=2;
17 
18 4.查   SELECT
19   SELECT 字段列表 FROMWHERE 条件
20 
21   SELECT name, gender FROM user_table WHERE ID=2;

 

 

3.数据库实例 - 用户注册、登陆

(1)项目需求

 1 用户注册、登陆:
 2 1.数据库结构(数据字典)
 3 2.接口格式(接口文档)
 4 
 5 
 6 1.数据库结构
 7 ID username password
 8 
 9 2.接口  --》 RESTful
10 注册:
11   /reg?user=xxx&pass=xxx
12   =>{err: 0, msg: '原因'}
13 
14 登陆:
15   /login?user=xxx&pass=xxx
16   =>{err: 0, msg: '原因'}

 

 

(2)实现

前端代码存在项目下的www文件夹中,后端代码位于项目根目录下的server.js中

前端代码:

 1 <!-- author: wyb -->
 2 <!DOCTYPE html>
 3 <html lang="en">
 4 <head>
 5     <meta charset="UTF-8">
 6     <meta name="viewport" content="width=device-width, initial-scale=1">
 7     <title>数据库版登陆注册</title>
 8     <!-- 引入jQuery -->
 9     <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
10     <style>
11 
12     </style>
13 </head>
14 <body>
15 
16 
17 用户名: <input type="text" id="user"> <br>
18 密码: <input type="password" id="pass"> <br>
19 <input type="button" value="注册" id="btn_reg">
20 <input type="button" value="登陆" id="btn_login">
21 
22 <script>
23     /*
24         // 前后端接口:
25         用户注册:
26         /reg?user=xxx&pass=xxx
27         =>{error: 0, msg: '原因'}
28 
29         用户登陆:
30         /login?user=xxx&pass=xxx
31         =>{error: 0, msg: '原因'}
32     */
33     $(function () {
34         // 注册
35         $('#btn_reg').click(function () {
36             $.ajax({
37                 url: '/reg',
38                 data: {user: $('#user').val(), pass: $('#pass').val()},
39                 dataType: 'json',
40                 success(json){
41                     if(json.err){
42                         alert("error: " + json.msg)
43                     } else {
44                         alert("register success")
45                     }
46                 },
47                 error(){
48                     alert("fail")
49                 }
50             })
51         })
52 
53         // 登陆
54         $('#btn_login').click(function () {
55             $.ajax({
56                 url: '/login',
57                 data: {user: $('#user').val(), pass: $('#pass').val()},
58                 dataType: 'json',
59                 success(json){
60                     if(json.err){
61                         alert("error: " + json.msg)
62                     } else {
63                         alert("login success")
64                     }
65                 },
66                 error(){
67                     alert("fail")
68                 }
69             })
70         })
71     })
72 </script>
73 
74 
75 </body>
76 </html>

 

后端代码: 

  1 const http = require('http')
  2 const mysql = require('mysql')
  3 const fs = require('fs')
  4 const url = require('url')
  5 const zlib = require('zlib')
  6 const crypto=require('crypto')
  7 
  8 const _key='sadfslekrtuew5iutoselgdtjiypoydse4ufhs.edtyo;s8te4arfeliawkfhtsie5tlfia;sefdshroiupeoutwyeli5gurse;ihf';
  9 
 10 function md5(str){
 11     let obj=crypto.createHash('md5')
 12     obj.update(str);
 13 
 14     return obj.digest('hex')
 15 }
 16 
 17 function md5_2(str){
 18     return md5(md5(str)+_key);
 19 }
 20 
 21 function log() {
 22     console.log.apply(console, arguments)
 23 }
 24 
 25 
 26 // 连接池
 27 let db = mysql.createPool({host: 'localhost', user: 'root', password: 'root', port: 3306, database: 'node'})
 28 
 29 let server = http.createServer(function (req, res) {
 30     let {pathname, query} = url.parse(req.url, true)
 31     log(pathname, query)
 32     let {user, pass} = query
 33     log(user, pass)
 34 
 35     // 接口
 36     switch (pathname){
 37         // 注册:
 38         case '/reg':
 39             // 校验数据
 40             if(!user){
 41                 res.write('{"err": 1, "msg": "username can\'t be null!"}')
 42                 res.end()
 43             }else if(!pass){
 44                 res.write('{"err": 1, "msg": "password can\'t be null!"}')
 45                 res.end()
 46             }else if(!/^\w{4,16}$/.test(user)){
 47                 res.write('{"err": 1, "msg": "username is invalid!"}')
 48                 res.end()
 49             }else if(/['|"]/.test(user)){
 50                 res.write('{"err": 1, "msg": "username is invalid!"}')
 51                 res.end()
 52             }else if(/['|"]/.test(pass)){
 53                 res.write('{"err": 1, "msg": "password is invalid!"}')
 54                 res.end()
 55             }else{
 56                 db.query(`SELECT * FROM user_table WHERE username='${user}';`, function (err, data) {
 57                     if(err) {
 58                         res.write('{"err": 1, "msg": "database error!"}')
 59                         res.end()
 60                     }
 61                     else if(data.length>0){
 62                         res.write('{"err": 1, "msg": "this username exists!"}')
 63                         res.end()
 64                     }
 65                     else {
 66                         db.query(`INSERT INTO user_table (ID, username, password) VALUES(0, '${user}', '${md5_2(pass)}');`, function (err, data) {
 67                             if(err) {
 68                                 res.write('{"err": 1, "msg": "database error!"}')
 69                                 res.end()
 70                             }
 71                             else {
 72                                 res.write('{"err": 0, "msg": "register success!"}')
 73                                 res.end()
 74                             }
 75                         })
 76                     }
 77                 })
 78             }
 79             break
 80         // 登陆:
 81         case '/login':
 82             if(!user){
 83                 res.write('{"err": 1, "msg": "username can\'t be null"}');
 84                 res.end();
 85             }else if(!pass){
 86                 res.write('{"err": 1, "msg": "password can\'t be null"}');
 87                 res.end();
 88             }else if(!/^\w{4,16}$/.test(user)){
 89                 res.write('{"err": 1, "msg": "username is invaild"}');
 90                 res.end();
 91             }else if(/['|"]/.test(pass)){
 92                 res.write('{"err": 1, "msg": "password is invaild"}');
 93                 res.end();
 94             }else{
 95                 db.query(`SELECT * FROM user_table WHERE username='${user}'`, (err, data)=>{
 96                     if(err){
 97                         res.write('{"err": 1, "msg": "database error"}');
 98                         res.end();
 99                     }else if(data.length===0){
100                         res.write('{"err": 1, "msg": "no this user"}');
101                         res.end();
102                     }else if(data[0].password!==md5_2(pass)){
103                         res.write('{"err": 1, "msg": "username or password is incorrect"}');
104                         res.end();
105                     }else{
106                         res.write('{"err": 0, "msg": "success"}');
107                         res.end();
108                     }
109                 });
110             }
111             break;
112 
113         default:
114             //获取文件日期
115             fs.stat(`www${pathname}`, (err, stat)=>{
116                 if(err){
117                     res.writeHeader(404);
118                     res.write('Not Found');
119                     res.end();
120                 }else{
121                     // 缓存
122                     // 请求头中有if-modified-since -> 不是第一次请求,之前浏览器中缓存了该页面
123                     if(req.headers['if-modified-since']){
124                         let oDate=new Date(req.headers['if-modified-since']);
125                         let time_client=Math.floor(oDate.getTime()/1000);
126                         let time_server=Math.floor(stat.mtime.getTime()/1000);
127 
128                         if(time_server>time_client){      // 服务器的文件时间 > 客户端手里的版本
129                             sendFileToClient();
130                         }else{
131                             res.writeHeader(304);
132                             res.write('Not Modified');
133                             res.end();
134                         }
135                     }
136                     // 请求头中没有if-modified-since -> 第一次请求 -> 直接返回要的文件
137                     else{
138                         sendFileToClient();
139                     }
140 
141                     // 直接返回文件
142                     function sendFileToClient(){
143                         //发送
144                         let rs=fs.createReadStream(`www${pathname}`);
145                         let gz = zlib.createGzip()
146                         res.setHeader('Last-Modified', stat.mtime.toGMTString());
147                         res.setHeader('content-encoding', 'gzip')
148                         //输出
149                         rs.pipe(gz).pipe(res)
150 
151                         rs.on('error', function(err){
152                             res.writeHeader(404);
153                             res.write('Not Found');
154                             res.end();
155                         });
156                     }
157                 }
158             });
159     }
160 })
161 
162 server.listen(8080)

 

posted @ 2018-09-26 11:32  woz333333  阅读(343)  评论(0编辑  收藏  举报