koa2+sequelize初探
項(xiàng)目結(jié)構(gòu)
- controllers:請(qǐng)求后的事件
- mdel:sequelize數(shù)據(jù)模型
- routes:路由分發(fā)
- views:使用ejs模板引擎
- app.js:項(xiàng)目入口
- 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
}
}
})