node封裝mysql模組

來源:互聯網
上載者:User

標籤:匯出   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模組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.