Koa中使用Sequelize操作數據庫

  • 第一步:安裝koa、koa-router、sequelize、mysql2,mysql2是mysql的驅動包,如果使用的是其他的數據庫,就改用其他數據庫的驅動包

    package.json中依賴的版本:

    "dependencies": {
        "bcryptjs": "^2.4.3",
        "koa": "^2.7.0",
        "koa-router": "^7.4.0",
        "mysql2": "^1.6.5",
        "sequelize": "^5.6.1"
      }
    

    bcryptjs是密碼操作工具包,用於對密碼進行加密操作

  • 創建數據庫連接

    // 文件名:core/db.js
    const Sequelize = require("sequelize");
    
    // 使用sequelize操作數據庫,必須導入數據庫依賴包,這裏導的是mysql2
    const sequelize = new Sequelize(數據庫名, 用戶名, 密碼, {
        dialect: 數據庫類型,這裏是mysql,
        host: 主機號,這裏是localhost,
        port: 端口號,這裏是3306,
        logging: true, // 是否顯示SQL語句
        timezone: "+08:00", // 時區,如果沒有設置,會導致數據庫中的時間字段與中國時區時間相差8小時
        define: {
            timestamps: true, // 是否自動創建時間字段, 默認會自動創建createdAt、updatedAt
            paranoid: true, // 是否自動創建deletedAt字段
            createdAt: "create_time", // 重命名字段
            updatedAt: "update_time",
            deletedAt: "delete_time",
            underscored: true // 開啓下劃線命名方式,默認是駝峯命名
        }
    });
    
    sequelize.sync({
        force: false // 每次啓動都重新自動創建表
    });
    
    module.exports = {
        sequelize
    }
    
  • 創建數據表對應的模型對象

    // 文件名:models/user.js
    const {Sequelize, Model} = require("sequelize")
    const bcryptjs = require("bcryptjs");
    const {sequelize} = require("../core/db");
    
    class User extends Model {
    
    }
    
    User.init({
        id: {
            type: Sequelize.INTEGER(11),
            autoIncrement: true, // 自動增長
            primaryKey: true // 主鍵字段
        },
        nickname: Sequelize.STRING(128),
        password: {
            type: Sequelize.STRING(512),
            // 對密碼進行加密,監聽屬性,使用了觀察者模式,當password屬性值被改變時,就執行下面的操作,觀察者模式在vue中使用的很多
            set(val) {
                const salt = bcryptjs.genSaltSync(10);
                const pwd = bcryptjs.hashSync(val, salt);
                // 將password屬性的屬性值設置爲pwd
                this.setDataValue("password", pwd);
            }
        },
        email: {
            type: Sequelize.STRING(128),
            unique: true
        },
        openid: {
            type: Sequelize.STRING(128),
            unique: true
        }
    }, {
        sequelize,
        tableName: "user" // 如果不設置tableName,自動生成的數據庫中的user表的表名爲Users
    })
    
    module.exports = {
        User
    }
    
  • 使用User模型向數據庫添加記錄

    // 文件名:api/user.js
    const Router = require("koa-router");
    const router = new Router({
        prefix: "/v1/user" // 設置路由前綴
    });
    const {User} = require("../../../models/user")
    
    // 訪問地址:http://localhost:8080/v1/user/register
    router.post("/register", async (ctx, next) => {
        // 將數據保存到數據庫
        User.create({
            nickname: v.get("body.nickname"),
            email: v.get("body.email"),
            password: v.get("body.password")
        });
    })
    
    module.exports = router;
    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章