在項目裏面安裝 sequelize 和 mysql ,也能夠使用 sequelize-cli ,這裏只是先學習下 sequelize 的
npm i sequelize
npm i mysql
html
首先在新建一個 config.js ,用來存放數據庫相關的配置mysql
const config = { database:'test', username:'www', password:'www', host:'localhost', port:3306 } module.exports = config
而後新建一個 db.jssql
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) })
建立一個公共的方法,用來新建 modelnpm
/** * 定義數據模型的公共方法 * @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 表格。api
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條數據進去。dom
// 填充數據 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 的這塊這裏就先無論了哈,下面有一個是獲取列表數據,一個是獲取單條數據。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 } }