Sequelize ORM sql 语句工具
sequelize orm中文网
视频学习@长乐未央
初始化配置
Sequelize orm 配置文章@落日沉溺于海
- 在命令行中全局安装
npm i -g sequelize-cli
- sequelize 执行需要匹配 mysql2 对应的依赖(安装 mysql2)
npm i sequelize mysql2
- 初始化项目
sequelize init
- 熟悉初始化项目后的项目结构
- config:时配置的意思,这里放的也就是 sequelize 所需要的连接数据库的配置文件
- migrations:是迁移的意思,如果你需要对数据库做新增表,修改字段,删除表等操作,就需要在这里添加迁移文件了。而不是像以前那样,使用客户端软件直接操作数据库
- models:这里面存放的模型文件,当我们使用 sequelize 来执行增删改查时,就需要用这里的模型文件了,每个模型都对应数据库中的一张表。
- seeders:是存放种子文件。一般会将一些需要添加到数据表的测试数据存放在这里。只需要执行一个命令,数据表中就回自动填充进一些用来测试内容的了。
- 配置 config.js 文件
- 第一个要改的就是密码,修改成 docker 配置里,我们设定的密码。接着要改的是数据库的名字,改为 clwy_api_development。
- 最下面,还要加上时区的配置,因为我们中国是在+8 区。这样在查询的时候,时间才不会出错。
- 那么同样的,也简单的给 test 和 production 也调整一下。
注意:
json 文件中都必须为字符串
要不有可能会报错。
- The “data” argument must be one of type string, TypedArray, or DataView. Received type number (我将password配置为了 number,所以有了这个报错。改成 string 类型即可。)
{"development": {"username": "root","password": "","database": "yourmysql","host": "127.0.0.1","dialect": "mysql","timezone": "+08:00"},"test": {"username": "root","password": null,"database": "yourtestmysql","host": "127.0.0.1","dialect": "mysql","timezone": "+08:00"},"production": {"username": "root","password": null,"database": "yourproductionmysql","host": "127.0.0.1","dialect": "mysql","timezone": "+08:00"}
}
- 使用 ORM 创建一个表
sequelize model:generate --name Article --attributes title:string,content:text
- 运行迁移
sequelize db:migrate
- 种子文件
sequelize seed:generate --name article
完成后,在 seeds 目录,就看到刚才命令新建的种子文件了。同样也是分为两个部分,up 部分用来填充数据,down 部分是反向操作,用来删除数据的。
种子文件改写代码如下
async up (queryInterface, Sequelize) {const articles = [];const counts = 100;for (let i = 1; i <= counts; i++) {const article = {title: `文章的标题 ${i}`,content: `文章的内容 ${i}`,createdAt: new Date(),updatedAt: new Date(),};articles.push(article);}await queryInterface.bulkInsert('Articles', articles, {});
},
- 运行种子
sequelize db:seed --seed xxx-article
sequelize 简化接口封装案例
- 在执行完上面操作(创建models,运行种子文件)后,进行下面接口封装
/admin/articles 文件代码
const express = require("express");
const router = express.Router();
const { Article } = require("../../models");
const { Op } = require("sequelize");
/* GET home page. */router.get("/getArticlesList", async function (req, res, next) {try {const query = req.query;const currentPage = Math.abs(Number(query.currentPage) || 1);const pageSize = Math.abs(Number(query.pageSize) || 10);/*变量定义offset 从那一页开始limit 查询多少条currentPage 当前页分页查询公式offset = (currentPage - 1) * limit*/const offset = (currentPage - 1) * pageSize;const condition = {// order: [["id", "DESC"]], // 根据id 倒序排列。数组套数组 是可以根据多个字段进行排列limit: pageSize,offset,};// 根据所传参数进行 模糊查询if (query.title) {condition.where = {title: { [Op.like]: `%${query.title}%` },};}// 查询所有参数// const list = await Article.findAll(condition);// 根据数量查询const { count, rows } = await Article.findAndCountAll(condition);// const list = [];res.json({code: 200,data: {list: rows,pagination: { currentPage, pageSize, totalCount: count }, // 返回总页数和当前页码,用于前端分页ti},message: "获取文章列表成功",});} catch (err) {res.json({ code: 500, message: err });}
});module.exports = router;// 创建文章router.post("/createArticle", async function (req, res, next) {// 白名单过滤 ,避免用户乱填 idconst body = {title: req.body.title,content: req.body.content,};const article = await Article.create(body);res.json({code: 201,message: "文章创建成功",data: article,});
});// 删除文章router.delete("/deleteArticle/:id", async function (req, res) {const id = req.params.id;// 查询文章 ,看是否存在const article = await Article.findByPk(id);if (!article) {res.json({ code: 404, message: "文章不存在" });return false;}await article.destroy(id);res.json({ status: true, code: 204, message: "删除成功" });
});// 更新文章router.put("/updateArticle/:id", async function (req, res) {const id = req.params.id;// 查询文章 ,看是否存在const article = await Article.findByPk(id);console.log("article", article);if (!article) {res.json({ code: 404, message: "文章不存在" });return false;}// 白名单过滤 ,避免用户乱填 idconst body = {title: req.body.title,content: req.body.content,};await article.update(body);res.json({ status: true, code: 204, message: "更新成功", data: article });
});
sequelize 指令执行相关报错
Unable to resolve sequelize package in C:\Users\
, 无法解析 C:\Users\中的 sequelize 包. 依次执行下面指令
- npm install sequelize-cli -g
- sequelize -h ,显示 Unable to resolve sequelize package in C:\Users\
- npm install --save sequelize