Nodejsステップアップ(6)-MySQLデータベースへの接続

21409 ワード

1.ライブラリ連結
MySQLデータベースへの接続にはインストールサポートが必要です
npm install mysql
mysql sever端子で事前にインストールする必要があります
データベースmydb 1を作成する
mysql> CREATE DATABASE mydb1;
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| mydb1             |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

次にテーブルuserを作成します.
create table user(  
id int not null primary key auto_increment,  
name VARCHAR(100) not null,  
pwd VARCHAR(100) not null,
create_date TIMESTAMP NULL DEFAULT now()
)ENGINE=InnoDB DEFAULT CHARSET=utf8;  
CREATE UNIQUE INDEX t_quiz_IDX_0 on user(name);

次にnodejsを使用してmysqlデータベースに接続します
 1 var mysql  = require('mysql');  //  MySQL  
 2 //    connection  
 3 var connection = mysql.createConnection({      
 4     host: 'localhost',       //    
 5     user: 'root',               //MySQL       
 6     password: 'root',        //MySQL        
 7     database: 'mydb1',  
 8     port: '3306'                   //     
 9 });
10 //    connection  
11 connection.connect(function(err){  
12     if(err){         
13         console.log('[query] - :'+err);  
14         return;  
15     }  
16     console.log('[connection connect]  succeed!');  
17 }); 
18 //----  
19 var userAddSql = 'insert into user (name,pwd) values(?,?)';
20 var param = ['fff','123'];
21 connection.query(userAddSql,param,function(err,rs){
22     if(err){
23         console.log('insert err:',err.message);
24         return;
25     }
26         console.log('insert success');
27 });
28 //      
29 connection.query('SELECT * from user where id=?',[2], function(err, rs) {  
30     if (err) {  
31         console.log('[query] - :'+err);  
32         return;  
33     } 
34     for(var i=0;i<rs.length;i++){
35         console.log('The solution is: ', rs[i].uname); 
36     }
37 });   
38 
39 //  connection  
40 connection.end(function(err){  
41     if(err){ 
42         console.log(err.toString());
43         return;  
44     }  
45     console.log('[connection end] succeed!');  
46 }); 

しかし、実際に接続を作成するたびにコストがかかり、実行効率に影響します.プール接続mysqlの接続方法:node-mysql
2.接続プール構成の使用
Node-mysqlは現在最も人気のあるnodeの下のmysql駆動であり、mysqlpoolのモジュールである.
次のコードは、getPool関数がcreatePoolで作成したデータベース接続プールオブジェクトを返す接続プールを提供します.
 1 var mysql  = require('mysql');  //  MySQL   
 2 function OptPool(){ 
 3     this.flag=true//      
 4     this.pool = mysql.createPool({     
 5         host: 'localhost',       //   
 6         user: 'root',               //MySQL      
 7         password: 'root',        //MySQL       
 8         database: 'test' 9         port: '3306'                   //    
10     }); 
11  
12     this.getPool=function(){ 
         return this.pool; 
21     } 
22 }; 
23 module.exports = OptPool; 

次のコードは、この接続プール、挿入、クエリーの使用方法を示します.注意すべきはconn.release()です.//接続を解放して接続プールに戻すには、操作が終了してから実行する必要があります.そうしないと、後続のデータベース操作がエラーになります.
 
 1 var OptPool = require('./models/OptPool'); 
 2  
 3 var optPool = new OptPool(); 
 4 var pool = optPool.getPool(); 
 5 
 6 //  SQL   
 7 //           
 8 pool.getConnection(function(err,conn){ 
 9     //----   
10     var userAddSql = 'insert into user (uname,pwd) values(?,?)'11     var param = ['eee','eee'];
12     conn.query(userAddSql,param,function(err,rs){
13         if(err){ 
14             console.log('insert err:',err.message); 
15             return16         } 
17         console.log('insert success'); 
18         //conn.release(); //     
19     })
20     //   
21     conn.query('SELECT * from user', function(err, rs) { 
22         if (err) { 
23             console.log('[query] - :'+err); 
24             return25         }   
26         for(var i=0;i<rs.length;i++){
27             console.log(rs[i].uname); 
28         }
29         conn.release(); //     
30     });
31 }); 

次に、相互に依存しているため、コードの可読性が特に悪くなる複雑な点を追加削除して変更するデータベース操作を紹介します.これにより、次に空腹フロー制御について説明する「nodejsステップ(7)-async非同期フロー制御」の内容が引き出されます.
 1 var OptPool = require('./models/OptPool'); 
 2  
 3 var optPool = new OptPool(); 
 4 var pool = optPool.getPool(); 
 5 
 6 var insertSQL = 'insert into table1(name,pwd) values("conan","123"),("fens.me","456")';
 7 var selectSQL = 'select * from table1 limit 10';
 8 var deleteSQL = 'delete from table1';
 9 var updateSQL = 'update table1 set name="conan update"  where name="conan"';
10 
11 pool.getConnection(function(err,conn){ 
12 //delete
13     conn.query(deleteSQL, function (err0, res0) {
14         if (err0) console.log(err0);
15         console.log("DELETE Return ==> ");
16         console.log(res0);
17 
18         //insert
19         conn.query(insertSQL, function (err1, res1) {
20             if (err1) console.log(err1);
21             console.log("INSERT Return ==> ");
22             console.log(res1);
23 
24             //query
25             conn.query(selectSQL, function (err2, rows) {
26                 if (err2) console.log(err2);
27 
28                 console.log("SELECT ==> ");
29                 for (var i in rows) {
30                     console.log(rows[i]);
31                 }
32 
33                 //update
34                 conn.query(updateSQL, function (err3, res3) {
35                     if (err3) console.log(err3);
36                     console.log("UPDATE Return ==> ");
37                     console.log(res3);
38 
39                     //query
40                     conn.query(selectSQL, function (err4, rows2) {
41                         if (err4) console.log(err4);
42 
43                         console.log("SELECT ==> ");
44                         for (var i in rows2) {
45                             console.log(rows2[i]);
46                         }
47                     });
48                 });
49             });
50         });
51     });
52 })