node使用MySQL數據庫

內容:css

1.node鏈接數據庫html

2.數據庫經常使用操做前端

3.數據庫實例 - 用戶註冊、登錄node

 

 

 

1.node鏈接數據庫mysql

(1)下載mysql模塊jquery

(2)使用mysql模塊鏈接數據庫ajax

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

這樣鏈接也有缺陷:鏈接會一直佔着數據庫,別的沒法在此鏈接結束以前鏈接數據庫,對於此咱們能夠使用鏈接池:數據庫

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

實例:json

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)
相關文章
相關標籤/搜索