node.js 使用 sequelize 操做數據庫

安裝 sequelize

在項目裏面安裝 sequelize 和 mysql ,也能夠使用 sequelize-cli ,這裏只是先學習下 sequelize 的
npm i sequelize
npm i mysqlhtml

鏈接數據庫

首先在新建一個 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
    }
}
相關文章
相關標籤/搜索