在项目里面安装 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 } }