標籤:匯出 rom node UI nec null 實現 tip cat
node是基於非同步,因此在進行資料庫查詢操作的通常是通過回調來操作查詢結果。但是在有了es7的async/await,基本不再需要回調了,所以本篇是基於async/await對mysql進行一次操作封裝,讓查詢更加方便。(node版本需>=7.0)。
簡單來說,async/await的實現原理是基於promise,根據promise的狀態來判斷是否真正返回,因此我們可以在mysql真正查詢到結果後將promise狀態切換為resolve,返回結果。如出現錯誤通過reject返回錯誤資訊,reject需要用try/catch進行捕獲。
‘use strict‘;const mysql = require(‘mysql‘);var local = truevar pool// 建立串連池if (local) { pool = mysql.createPool({ connectionLimit: 50, host: ‘localhost‘, user: ‘root‘, password: ‘root‘, database: ‘crawl‘, multipleStatements: true //是否允許執行多條sql語句 });} //將結果已對象數組返回var row = (sql, ...params) => { return new Promise(function (resolve, reject) { pool.getConnection(function (err, connection) { if (err) { reject(err); return; } connection.query(sql, params, function (error, res) { connection.release(); if (error) { reject(error); return; } resolve(res); }); }); });};//返回一個對象var first = (sql, ...params) => { return new Promise(function (resolve, reject) { pool.getConnection(function (err, connection) { if (err) { reject(err); return; } connection.query(sql, params, function (error, res) { connection.release(); if (error) { reject(error); return; } resolve(res[0] || null); }); }); });};//返回單個查詢結果var single = (sql, ...params) => { return new Promise(function (resolve, reject) { pool.getConnection(function (err, connection) { if (err) { reject(err); return; } connection.query(sql, params, function (error, res) { connection.release(); if (error) { reject(error); return; } for (let i in res[0]) { resolve(res[0][i] || null); return; } resolve(null); }); }); });}//執行代碼,返回執行結果var execute = (sql, ...params) => { return new Promise(function (resolve, reject) { // 擷取串連 pool.getConnection(function (err, connection) { if (err) { reject(err); return; } // 操作資料庫 connection.query(sql, params, function (error, res) { // 釋放 connection.release(); if (error) { reject(error); return; } resolve(res); }); }); });}//模組匯出module.exports = { ROW: row, FIRST: first, SINGLE: single, EXECUTE: execute}/*串連mysql*/function connectToMysql() { var connection = mysql.createConnection({ host: ‘‘, user: ‘‘, password: ‘‘, database: ‘‘ }); connection.connect(); //查詢 connection.query(‘SELECT * FROM user;‘, function (err, rows, fields) { if (err) throw err; console.log(‘The solution is: ‘, rows[0]); }); //關閉串連 connection.end();}
node封裝mysql模組