node-ajax操作sql自封裝模塊

Db.js數據庫連接模塊

const mysql = require("mysql");
const dbConfig = {
    host: "localhost",
    port: 3306,
    user: "root",
    password: "",
    database: "數據庫"
}
const to = require("./awaitTo");
class Db {
    static connect(){ // 數據庫連接的動作
        this.con = mysql.createConnection(dbConfig);
        this.con.connect();
    }
    static operator(sqlStr){ // 此方法利用Promise把數據庫的執行sql語句的異步代碼封裝進去
        return new Promise((resolve, reject) => {
            this.con.query(sqlStr, (err, result) => {
                if (err) {
                    reject(err);
                } else {
                    resolve(result);
                }
            })
        })
    }
    static async query(sqlStr){ // static修飾的方式裏的this, 指向的是類
        return await to(this.operator(sqlStr));
    }
}

module.exports = Db; // 導出當前封裝的Db工具類

awaitTo.js模塊

function to(promise) {
    let p = promise.then(data => [null, data])
          .catch(err => [err, undefined]);
    return p;
}
module.exports = to;

Result.js模塊

// 定義統一的返回接口的數據對象格式, 方便前端統一處理判斷
function underline2Hump(s) {
    return s.replace(/_(\w)/g, function (all, letter) {
        return letter.toUpperCase()
    })
}

// xxx_axx  轉 xxxAxx 下劃線_轉駝峯方法
// 注意嵌套問題 (所以需要遞歸)
const jsonToHump = (obj) => {
    if (obj instanceof Array) { // instanceof 判斷左側對象是否是右側類的實例出來的對象 跟typeof 類似
        obj.forEach(function (v, i) {
            jsonToHump(v) // 處理數組裏每一項
        })
    } else if (obj instanceof Object) {
        Object.keys(obj).forEach(function (key) { //  Object.keys(obj) 取出所有此對象所有的key返回一個數組
            var newKey = underline2Hump(key) // 把下劃線的key轉成駝峯連接
            if (newKey !== key) { // 證明一個是駝峯一個還是下劃線, 所以進入, 刪除下劃線的key, 添加駝峯的key然後賦值.
                obj[newKey] = obj[key]
                delete obj[key]
            }
            jsonToHump(obj[newKey]) // 如果對象key對應的value還是一個對象, 那麼所有需要調用在判斷
        })
    } // 因爲如果value既不是對象也不是數組, 沒有必要再進入遞歸了
}

/**
 * 完全成功
 * list 數據
 * msg 提示文字
 * code: 自定義一個前端判斷狀態的數字
 */
// exports.a = 1 和module.exports = {a: 1}相等
exports.Success = (list = [], msg = '恭喜你, 操作成功') => {
     // 轉成駝峯標識
    jsonToHump(list) // 注意: 對象是引用關係, 所以傳參是淺複製, 下面返回的還是同一個處理後的引用的數組/對象
    return {
        msg,
        code: 200,
        list 
    }
}
// 參數正確, 但是權限不夠
exports.Guest = (msg = '權限非法') => {
    return {
        msg,
        code: 403
    }
}
// 參數錯誤,請檢查傳遞的參數
exports.MError = (msg = '參數等發生錯誤') => {
    return {
        msg,
        code: 500
    }
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章