Sequelize ORM sql 语句工具
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) {
// 白名单过滤 ,避免用户乱填 id
const 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;
}
// 白名单过滤 ,避免用户乱填 id
const 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