從零開始構(gòu)建一個Koa2+MySQL項(xiàng)目

一、初始化Koa2框架

1.運(yùn)用腳手架初始化Koa2框架

npm install -g koa-generator -g   //全局安裝koa-generator命令

2.使用koa-generator生成koa2項(xiàng)目

koa2  project(項(xiàng)目名稱) 

3.項(xiàng)目初始化

cd project(項(xiàng)目名稱) 
npm install

自此,我們的項(xiàng)目就成了下面這個亞子


Koa2初始化后的亞子

我們需要對其改造成我們想要的樣子,和express框架一樣

config 配置文件
controllers 項(xiàng)目控制器存放目錄:接受請求,處理邏輯
dbhelper 數(shù)據(jù)庫CRUD操作的封裝
log 日志文件
同時把public文件夾和routes文件夾以及views文件夾刪掉,因?yàn)槭羌兦昂笈_分離項(xiàng)目,所以在app.js里面也將相關(guān)內(nèi)容刪掉。


改造好的亞子

二、在koa2框架中導(dǎo)入MySQL數(shù)據(jù)庫

MySQL數(shù)據(jù)庫的安裝和配置我就不說了
https://www.cnblogs.com/xch-yang/p/7661069.html

在config文件夾里新建Database.js文件同時將它暴露出來( 使用連接池增加效率)

const mysql = require("mysql");


let config = mysql.createPool({
    host: "127.0.0.1",   // 數(shù)據(jù)庫的地址
    user: "root",        // 數(shù)據(jù)庫用戶名
    password: "root",    // 數(shù)據(jù)庫密碼
    port: "3306",        // mysql數(shù)據(jù)庫的端口號
    database: "personal_blog"      // 使用那個數(shù)據(jù)庫
})

// 這里也可以像mongodb一樣寫返回參數(shù),各種連接不成功的
console.log("數(shù)據(jù)庫連接成功");

config.on('release', function (connection) {
    console.log('Connection %d released', connection.threadId);
});

module.exports = config;

在dbhelper文件夾里新建db.js文件作為封裝數(shù)據(jù)庫操作代碼

以下是我用Promise封裝的一些關(guān)于MySQL數(shù)據(jù)庫增刪改查的一些常用操作,關(guān)于SQL語句更多的操作網(wǎng)上有很多,直接替換就好,這兒不多說


const config = require('../config/Database');

// sql查詢表中數(shù)據(jù)總條:SELECT COUNT(*) FROM 表名稱。
// 返回大于 20 歲的人數(shù):
// SELECT COUNT(*) AS count FROM Personsinfo WHERE Age>20

// 增
exports.add = function (addSqlParams) {

    let addSql = 'INSERT INTO user(user_name,user_cloudId,user_qqNumber) VALUES(?,?,?)';

    return new Promise(function (resolve, reject) {

        config.query(addSql, addSqlParams, function (err, result) {

            resolve(result);

            if (err) {
                console.log(err);
                reject(err.message);
            }

            console.log('INSERT ID:', result);

        });
    });
}

// 刪
exports.delete = function (conditions) {

    let delSql = 'DELETE FROM ychat_user where ' + conditions;

    return new Promise(function (resolve, reject) {

        config.query(delSql, function (err, result) {

            resolve(result);

            if (err) {
                reject(err.message);
            }

            console.log('DELETE affectedRows', result.affectedRows);

        });
    });
}




// 改
exports.set = function (data, conditions) {

    let modSql = 'UPDATE ychat_user SET ' + data + ' WHERE ' + conditions;

    return new Promise(function (resolve, reject) {

        config.query(modSql, function (err, result) {

            resolve(result);

            if (err) {
                console.log(err);
                reject(err.message);
            }

            console.log('UPDATE affectedRows', result.affectedRows);

        });
    });
}



// 查
exports.select = function (parmas) {

    let sql = 'select * from ychat_user where ' + "user_id=" + "'" + parmas + "'" + " or " + "mobile=" + "'" + parmas + "'";

    return new Promise(function (resolve, reject) {

        config.query(sql, function (err, result) {

            resolve(result);
            if (err) {
                reject(err.message);
            }

        });
    });
}

在controllers文件夾里新建control.js文件作為封裝邏輯操作代碼

下面是我關(guān)于邏輯操作的一些代碼

const DB = require("../dbhelper/db.js");


exports.doLogin = async (ctx, next) => {
    let code = ctx.request.body.code;
    let addparams = ['adwsd', 3, 2]
    let result = DB.add(addparams);
    console.log(result)
    ctx.response.body = {
        list: '',
        state: '測試成功',
        code: '0'

    }
}

在主文件目錄下新建router.js文件當(dāng)作路由中間件,這樣我們可以將接口看的更加直觀

/**
 * 前端路由表
 */
const router = require('koa-router')()
const control= require('./controllers/control.js');
const high = require('./controllers/High')

router.get('/doLogin', control.doLogin);

// 測試高并發(fā)接口·
router.get('/high', high.high);

module.exports = router.routes();

同時在app.js的最后插入

let route = require('./router')
app.use(route);

作為中間件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容