【Node.js】Sequelize 操作 MySQL 数据库(模型增删改)

新增数据 / 初始化

const adminModel = require("./model/adminModel")

// 新增方法1 build + save
// 同步方法 创建一个实例
const instance = adminModel.build({
    loginId: '123',
    loginPwd: '123'
});
instance.loginId = 'asd';
instance.save() // 某一个数据实例在 save 之后才可以保存 返回一个 Promise
// 在数据库中查找(获取)一条数据,也是指获取一个数据实例,这个数据实例上有若干方法,比如save
// instance.toJSON()  // 会将实例转为一个 json  对象

// 新增方法2 create
adminModel.create({
    loginId: 'admin',
    name: '超级管理员',
})

项目实践(以添加文章为例):

省略业务细节,重点学习业务架构

app.js

const express = require('express');
const blogRouter = require('./routes/blog');
const app = express();
app.use('/api/blog', blogRouter);

blog.js

const router = express.Router();

// 添加文章
router.post('/', async function (req, res, next) {
    // console.log(req.body)
    res.send(await addBlogService(req.body))
})

blogService.js

// 添加文章
module.exports.addBlogService = async (newBlogInfo) => {
    // ...
    const data = await addBlogDao(newBlogInfo);
    return formatResponse(0, '', data);
}

blogDao.js

// 添加文章
module.exports.addBlogDao = async function (newBlogInfo) {
    // ...
    const result = await blogModel.create(newBlogInfo);
    return result.dataValues
}

blogModel.js

const {DataTypes} = require("sequelize")
const sequelize = require("../dbConnect")
// 定义数据表
module.exports = sequelize.define("blog", {
    // id 自动生成 无需手动定义
    title: {
        type: DataTypes.STRING,
        allowNull: false,
    },
    description: {
        type: DataTypes.TEXT,
        allowNull: false,
    },
    // ...
}, {
    freezeTableName: true, // 禁止默认的自动复数化
    createdAt: false, // 关闭默认字段
    updatedAt: false // 关闭默认字段
})

删除数据

// 删除文章
// 方法一:
module.exports.deleteBlogDao = async function (id) {
    return await blogModel.destroy({
        where: {
            id
        }
    })
}

// 方法二:
const instance = await blogModel.findByPk(id);
await instance.destroy();

修改数据

// 修改文章
// 方法一:
module.exports.updateBlogDao = async function (id, newBlogInfo) {
    await blogModel.update(newBlogInfo, {
        where: {
            id
        }
    })
    return await blogModel.findByPk(id)
}

// 方法二:
const instance = await blogModel.finByPk(id);
instance.title = newBlogInfo.title;
instance.save()
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小秀_heo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值