koa2+sequelize初探

koa2+sequelize初探

項(xiàng)目結(jié)構(gòu)

  1. controllers:請(qǐng)求后的事件
  2. mdel:sequelize數(shù)據(jù)模型
  3. routes:路由分發(fā)
  4. views:使用ejs模板引擎
  5. app.js:項(xiàng)目入口
  6. config.js:配置文件

sequelize

入口

const Sequelize = require('sequelize');
const config = require('../config');
exports.sequelize = function () {
    return new Sequelize(
        config.mysql.database,
        config.mysql.username,
        config.mysql.password, {
            'dialect': 'mysql', // 數(shù)據(jù)庫(kù)使用mysql
            'host': config.mysql.host, // 數(shù)據(jù)庫(kù)服務(wù)器ip
            'port': config.mysql.port, // 數(shù)據(jù)庫(kù)運(yùn)行端口
            'timestamp': true, // 這個(gè)參數(shù)為true是MySQL會(huì)自動(dòng)給每條數(shù)據(jù)添加createdAt和updateAt字段
            'quoteIdentifiers': true
        }
    );
};

定義數(shù)據(jù)模型

module.exports = function (sequelize, DataTypes) {
    return sequelize.define('student', {
        sid: {
            type: DataTypes.STRING(50),
            primaryKey: true
        },
        name: {
            type: DataTypes.STRING(100)
        },
    })
}

確定關(guān)聯(lián)

const db = require('./db').sequelize();
let student = db.import('./student');
let course = db.import('./course');

// 同步模型到數(shù)據(jù)庫(kù)中
//多對(duì)多模型通過中間表方式簡(jiǎn)歷聯(lián)系
course.belongsToMany(student, {
    through: 'courseToStudent',   
    foreignKey: 'sid',
})
student.belongsToMany(course, {
    through: 'courseToStudent',
    foreignKey: 'cid',

})

創(chuàng)建初始數(shù)據(jù)

 db.sync({
     alter: true
 }).then(function (result) {
     (async () => {
         let aa = await student.create({
             sid: 's-' + new Date(),
             name: '王噠四號(hào)',
             age: '17',
             sex: '男',
         });
         let bb = await course.create({
             cid: '1104',
             name: '化學(xué)',
         });
        bb.addStudent(aa)       //建立聯(lián)系
    })();
 });

多表操作

查詢

let aa = await student.findAll({
            include: {
                model: course,    //關(guān)聯(lián)數(shù)據(jù)默認(rèn)放到courses中
            }
        })

創(chuàng)建

 let aa = await student.create({
            sid: query.sid,
            name: query.name,
            age: query.age,
            sex: query.sex
        })

更新

//先更新主表非關(guān)聯(lián)部分
let cc = await student.update({
    name: query.name,  
    age: query.age,    
    sex: query.sex 
}, { 
    where: {      
        sid    
    }     
})
//拿到當(dāng)前需要改的學(xué)生       
let dd = await student.findOne({
    where: {  
        sid   
    }  
}) 
//通過參數(shù)獲得當(dāng)前學(xué)生需要更改的課程
let ee = query.courses
//將所有課程找到并推入到ff
let ff = []   
for (let i = 0; i < ee.length; i++) {      
    let bb = await course.findOne({        
        where: {        
            cid: ee[i]        
        }       
    })           
    ff.push(bb)        
}        
//更改當(dāng)前學(xué)生的課程關(guān)聯(lián)
dd.setCourses(ff)

刪除

let aa = await student.destroy({
            where: {
                sid
            }
        })

koa2

監(jiān)聽端口

const Koa = require('koa')
const app = new Koa();
const config = require('./config');

app.listen(config.port, function listening() {
    console.log('服務(wù)器啟動(dòng)成功!端口:', config.port)
})

引入模板引擎

const views = require('koa-views')
app.use(views(__dirname + '/views', {
    extension: 'ejs'
}))

路由分發(fā)

1. 引入

const router = require('./routes')
app.use(router.routes()).use(router.allowedMethods());

2. 具體操作

router.get('/', async (ctx) => {
    try {
        //查詢數(shù)據(jù)庫(kù),拿到數(shù)據(jù)卦溢,返回給前端
        let aa = await student.findAll({
            include: {
                model: course,
            }
        })
        // ctx.body = aa
        await ctx.render('index', {
            students: aa
        })
    } catch (e) {
        return ctx.body = {
            msg: '獲取信息失敗',
            ab: e,
            code: -1
        }
    }
})
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尖坤,一起剝皮案震驚了整個(gè)濱河市持际,隨后出現(xiàn)的幾起案子杰扫,更是在濱河造成了極大的恐慌戴涝,老刑警劉巖熄阻,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斋竞,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡秃殉,警方通過查閱死者的電腦和手機(jī)坝初,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钾军,“玉大人鳄袍,你說我怎么就攤上這事±艄В” “怎么了拗小?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)樱哼。 經(jīng)常有香客問我哀九,道長(zhǎng)剿配,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任阅束,我火速辦了婚禮呼胚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘息裸。我一直安慰自己蝇更,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布界牡。 她就那樣靜靜地躺著簿寂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宿亡。 梳的紋絲不亂的頭發(fā)上常遂,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音挽荠,去河邊找鬼克胳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛圈匆,可吹牛的內(nèi)容都是我干的漠另。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼跃赚,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼笆搓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起纬傲,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤满败,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后叹括,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體算墨,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年汁雷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了净嘀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡侠讯,死狀恐怖挖藏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情厢漩,我是刑警寧澤熬苍,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響柴底,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜粱胜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一柄驻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧焙压,春花似錦鸿脓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至幻件,卻和暖如春拨黔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绰沥。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工篱蝇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人徽曲。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓零截,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親秃臣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子涧衙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容