安裝 sequelize
在項目里面安裝 sequelize 和 mysql ,也可以使用 sequelize-cli ,這里只是先學習下 sequelize 的
npm i sequelize
npm i mysql
連接數據庫
首先在新建一個 config.js ,用來存放數據庫相關的配置
const config = {
database:'test',
username:'www',
password:'www',
host:'localhost',
port:3306
}
module.exports = config
然后新建一個 db.js
const config = require('./config')
// connect db
const sequelize = new Sequelize(config.database, config.username, config.password, {
host: config.host,
port: config.port,
dialect: 'mysql',
operatorsAliases: false
})
module.exports = sequelize
添加下面的代碼可以檢查是否連接成功:
sequelize
.authenticate()
.then(() => {
console.log('Connection has been established successfully.')
})
.catch(err => {
console.error('Unable to connect to the database:', err)
})
新建表,同步表
創建一個公共的方法,用來新建 model
/**
* 定義數據模型的公共方法
* @param {any} name 模型名稱【數據庫表名】
* @param {any} attributes 數據字段集合
* @returns 數據模型對象
*/
function defineModel (name, attributes) {
var attrs = {}
for (let key in attributes) {
let value = attributes[key]
if (typeof value === 'object' && value['type']) {
value.allowNull = value.allowNull || false
attrs[key] = value
} else {
attrs[key] = {
type: value,
allowNull: false
}
}
}
// 附加公共字段
attrs.createAt = {
type: Sequelize.BIGINT,
allowNull: false
}
attrs.updateAt = {
type: Sequelize.BIGINT,
allowNull: false
}
// 狀態:0表示有效,1表示無效,2表示已刪除,默認為0.
attrs.status = {
type: Sequelize.INTEGER,
allowNull: false
}
// 版本
// attrs.status = {
// type: Sequelize.INTEGER,
// allowNull: false
// }
// 調用seq的方法定義模型並返回
return sequelize.define(name, attrs, {
tableName: name,
timestamps: false,
hooks: {
beforeValidate: function (obj) {
let now = Date.now()
if (obj.isNewRecord) {
obj.createAt = now
obj.updateAt = now
// obj.version = 0
} else {
obj.updateAt = now
// ++obj.version
}
}
}
})
}
創建一個 models 文件夾,創建一個 goods 文件,把上面那個公共的定義模型方法進入,創建 goods 表格。
var db = require('../db')
var Sequelize = require('sequelize')
// 創建表模型
const Goods = db.defineModel('goods', {
id: {
type: Sequelize.BIGINT(11),
primaryKey: true,
allowNull: false,
unique: true,
autoIncrement: true
},
name: Sequelize.STRING(50),
img_src: Sequelize.STRING(100),
price: Sequelize.FLOAT
})
// 同步表結構
Goods.sync() // 如果表存在 不會刷新結構
Goods.sync({ force: true }) // 如果表存在 會刪除表重新建表
module.exports = Goods
表插入數據
如果要操作 model 插入一些初始數據,可以直接用圖形工具進行操作,也可以用 sequelize 來,還是在 goods 那個文件里面,添加9條數據進去。
// 填充數據
for (let n=1;n<10;n++) {
Goods.create({
name:`good${n}`,
img_src: `/static/imgs/good${n}.jpg`,
price: Math.random()*100,
status:1
})
}
獲取表數據
獲取表數據主要用的是 findAll, find 這些 api,具體詳情參見官網: sequelize 官網
利用 koa 創建一個接口,在這個接口返回 goods 表的數據,有關於 koa 的這塊這里就先不管了哈,下面有一個是獲取列表數據,一個是獲取單條數據。
const goods = require('../models/goods')
module.exports = {
'GET /goods/list': async (ctx, next) => {
let data = await goods.findAll()
ctx.body = data
},
'GET /goods/:id': async (ctx, next) => {
let gid = ctx.params.id
let data = await goods.findOne({ where: {id: gid} })
ctx.body = data
}
}