安裝MySql模塊:mysql
npm install mysql sql
建立鏈接:數據庫
1 const mysql = require('mysql') 2 3 // 鏈接 mysql 服務器 4 const connection = mysql.createConnection({ 5 host: '127.0.0.1', 6 user: 'root',//數據庫訪問的用戶名 7 password: '123456',//數據庫訪問的密碼 8 port: '3306',//數據庫端口號 9 database: 'XXX',//數據庫名稱 10 }) 11 // 執行SQL 12 connection.query(sql, function (err, result) { 13 err // 錯誤信息 14 result // 結果 15 }) 16 // 銷燬鏈接 | 因爲 JS 是異步的,因此當前代碼會在執行 SQL 以前就銷燬了鏈接 17 connection.destroy()
用 createConnection 建立 Mysql 鏈接,每執行一次 connection.query 都是一個全新的鏈接,會形成一個資源的極大浪費,下降性能。npm
鏈接池是另外的一種執行方法,它一次性的建立了多個鏈接,而後根據客戶端的查詢,自動的 分發、複用、管理 這些鏈接。數組
1 const mysql = require('mysql') 2 3 //建立鏈接池 4 const pool = mysql.createPool({ 5 host: '127.0.0.1', 6 user: 'root',//數據庫訪問的用戶名 7 password: '123456',//數據庫訪問的密碼 8 port: '3306',//數據庫端口號 9 database: 'XXX',//數據庫名稱 10 }) 11 12 const db = { 13 sqlQuery(sql, values) { 14 return new Promise((resolve, reject) => { 15 pool.getConnection((err, connection) => { 16 if (err) { 17 reject(err) 18 } else { 19 if (values) { 20 connection.query(sql, values, (err, rows) => { 21 if (err) { 22 reject(err) 23 } else { 24 resolve(rows) 25 } 26 connection.release() 27 }); 28 } else { 29 connection.query(sql, (err, rows) => { 30 if (err) { 31 reject(err) 32 } else { 33 resolve(rows) 34 } 35 connection.release() 36 }); 37 } 38 } 39 }) 40 }) 41 } 42 }
MySql查詢變量用一個 ?號 做爲佔位符(防止SQL注入):服務器
1 var query = 'UPDATE users SET foo = ?, bar = ?, baz = ? WHERE id = ?', 2 value = ['a', 'b', 'c', userId]; 3 connection.query(query, value, (error, results, fields) => { /* ... */ });
第一個參數 query 是一個字符串,是查詢的 sql 語句,含有佔位符。異步
第二個參數 value 是一個數組,含有全部佔位符的值。性能
標識符(數據庫、表、列名)用兩個 ?號 作佔位符(即 ?? ),除此以外,能夠將標識符的名字當成 query 變量一塊兒傳進值列表中:ui
1 var query = 'UPDATE ?? SET foo = ?, bar = ?, baz = ? WHERE id = ?', 2 value = ['users', 'a', 'b', 'c', userId]; 3 connection.query(query, value, (error, results, fields) => { /* ... */ });