天天看點

Node.js學習筆記(十八、連接配接mysql)

上一個學曆node.js RESTFul API,但是隻有查、增、改的API,而Node.js既然是運作在服務端的js,自然也要能對資料庫進行操作。

資料庫

建立資料庫:

CREAT DATABASE nodejs      

建立表:

DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) NOT NULL,
  `movie` varchar(30) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;      

向表中添加一些資料:

INSERT INTO `role` VALUES ('1', '燕雙鷹', '英雄');
INSERT INTO `role` VALUES ('2', '李元芳', '神探狄仁傑');
INSERT INTO `role` VALUES ('3', '張小敬', '長安十二時辰');
INSERT INTO `role` VALUES ('4', '紫霞仙子', '大話西遊');      

安裝驅動

使用淘寶鏡像安裝。

Node.js學習筆記(十八、連接配接mysql)

連接配接資料庫:

test.js:

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '123456',
  database : 'test'
});
 
connection.connect();
 
connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
  if (error) throw error;
  console.log('The solution is: ', results[0].solution);
});      

運作:

OK,連接配接成功了。

連接配接參數:

參數 描述
host 主機位址 (預設:localhost)
user 使用者名
password 密碼
port 端口号 (預設:3306)
database 資料庫名
charset 連接配接字元集(預設:‘UTF8_GENERAL_CI’,注意字元集的字母都要大寫)
localAddress 此IP用于TCP連接配接(可選)
socketPath 連接配接到unix域路徑,當使用 host 和 port 時會被忽略
timezone 時區(預設:‘local’)
connectTimeout 連接配接逾時(預設:不限制;機關:毫秒)
stringifyObjects 是否序列化對象
typeCast 是否将列值轉化為本地JavaScript類型值 (預設:true)
queryFormat 自定義query語句格式化方法
supportBigNumbers 資料庫支援bigint或decimal類型列時,需要設此option為true (預設:false)
bigNumberStrings supportBigNumbers和bigNumberStrings啟用 強制bigint或decimal列以JavaScript字元串類型傳回(預設:false)
dateStrings 強制timestamp,datetime,data類型以字元串類型傳回,而不是JavaScript Date類型(預設:false)
debug 開啟調試(預設:false)
multipleStatements 是否許一個query中有多個MySQL語句 (預設:false)
flags 用于修改連接配接标志
ssl 使用ssl參數(與crypto.createCredenitals參數格式一至)或一個包含ssl配置檔案名稱的字元串,目前隻捆綁Amazon RDS的配置檔案

增删改查

又到了熟悉的增删改查環節了。

test.js:

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '123456',
  database : 'test'
});
 
connection.connect();
var  sql = 'SELECT * FROM role';
//查
connection.query(sql,function (err, result) {
        if(err){
          console.log('[SELECT ERROR] - ',err.message);
          return;
        }
 
       console.log('--------------------------SELECT----------------------------');
       console.log(result);
       console.log('------------------------------------------------------------\n\n');  
});
 
connection.end();      
Node.js學習筆記(十八、連接配接mysql)
var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '123456',
  database : 'test'
});
 
connection.connect();

var  addSql = 'INSERT INTO role(name,movie) VALUES(?,?)';
var  addSqlParams = ['洪世賢', '回家的誘惑'];
//增
connection.query(addSql,addSqlParams,function (err, result) {
        if(err){
         console.log('[INSERT ERROR] - ',err.message);
         return;
        }        
 
       console.log('--------------------------INSERT----------------------------');
       //console.log('INSERT ID:',result.insertId);        
       console.log('INSERT ID:',result);        
       console.log('-----------------------------------------------------------------\n\n');  
});
 
connection.end();      

執行:

Node.js學習筆記(十八、連接配接mysql)

看一下資料庫:

Node.js學習筆記(十八、連接配接mysql)

新增資料已經在裡面了。

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '123456',
  database : 'test'
});
 
connection.connect();

var modSql = 'UPDATE role SET movie= ? WHERE Id = ?';
var modSqlParams = ['品如衣之清醒渣男傳',5];
//改
connection.query(modSql,modSqlParams,function (err, result) {
   if(err){
         console.log('[UPDATE ERROR] - ',err.message);
         return;
   }        
  console.log('--------------------------UPDATE----------------------------');
  console.log('UPDATE affectedRows',result.affectedRows);
  console.log('-----------------------------------------------------------------\n\n');
});
 
connection.end();      
Node.js學習筆記(十八、連接配接mysql)

檢視資料庫:

洪世賢的movie已經改了。

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : 'xing0515',
  database : 'nodejs'
});
 
connection.connect();
 
var delSql = 'DELETE FROM role where id=5';
//删
connection.query(delSql,function (err, result) {
        if(err){
          console.log('[DELETE ERROR] - ',err.message);
          return;
        }        
 
       console.log('--------------------------DELETE----------------------------');
       console.log('DELETE affectedRows',result.affectedRows);
       console.log('-----------------------------------------------------------------\n\n');  
});
 
connection.end();      
Node.js學習筆記(十八、連接配接mysql)
Node.js學習筆記(十八、連接配接mysql)

好了,洪世賢沒了。

當然寫幾個函數交給server.js調用也是可以的。

參考:

【1】、

https://www.runoob.com/nodejs/nodejs-mysql.html

【2】、

http://how2j.cn/k/nodejs/nodejs-mysql/1768.html#nowhere