# 可持久化Mysql
- node.js 中实现持久化的多种方法
- myusql 下载、安装和配置
- node.js 中原声 mysql 驱动模块的应用
- 掌握 node.js 中的 ORM 模块 Sequelize 的应用
- 掌握 Sequelize 的应用案例
- 了解数据库设计的原理
- 设计规范和反范式
- ORM 带来的进步
- 全栈关注点 - 快速迭代 + 易于横向性能扩展
docker 轻量级的虚拟机
文档 https://yeasy.gitbooks.io/docker_practice/install/mac.html
Docker Compose
Node.js 中实现持久化的方法
- 文件系统 fs
- 数据库
- 关系型数据库-mysql
- 文档型数据可-mongodb
- 键值对型数据库-redis
# 文件系统数据库
-> fs.db
- 操作
[nodemon] starting `node fsdb.js`
操作文件系统---mongodb
set a 100
set a 100
写入成功
[nodemon] restarting due to changes...
[nodemon] starting
get a
get a
100
set b 888
set b 888
写入成功
# mysql
安装 mysql 模块
npm i mysql --save
基本使用 // mysql.js const mysql = require('mysql');
// 链接配置 const cfg = { host:'', user:'root', password:'', database:' }
// 创建链接 const con = mysql.createConnect(cfg)
// 连接 con.connect(err=>{ if(err){ throw err; } })
- ES2017 写法
// mysql2 (async ()=>{ // get the client const mysql = require('mysql2/promise); // 连接配置 const cfg = { host:'', user:'root', password:'example', database:'’ } // create the connection const connection = await mysql.createConnetion(cfg); })
传统设计模式 原型->设计模型->具体功能
# Node.js ORM - Sequelize 中间件操作数据库
概述:基于 Promise 的 ORM 支持多种数据库、事务、关联等
安装:npm i sequelize mysql2 -S
基本使用 ->sequelize.js
(async ()=>{ const Sequelize = require("sequelize"); // 建立连接 const sequelize = new Sequelize("kaikeba","root","example",{ host:"localhost", dialect:"mysql", operatorAliases:false }) })
数据库中间件
- 在不使用 sql 语句的情况下,去操作数据库
传统数据库弹性不足
- 数据库修改、程序修改 灵活性不强
sequelize校验 可以通过校验功能验证模型字段格式、内容、校验会在creat、update和save时自动运行
price:{ validate:{ isFloat:{msg:"价格字段请输入数字"}, min:{args:[0],msg:"价格字段必须大雨0"} } }, stock:{ validate:{ isNumeric:{ msg:"库存字段请输入数字" } } }
模型扩展,可添加模型实例方法或类方法扩展模型
// 添加类级别的方法
Fruit.classify = function (name) {
const tropicFruits = ['香蕉','芒果','椰子'] // 热带水果
return tropicFruits.includes(name)?"热带水果":"其他水果";
};
// 使用方法
['香蕉','草莓'].forEach(f=>console.log(f+'是'+Fruit.classify(f)));
// 添加类方法
// 写一个类方法
Fruit.prototype.totalPrice = function(count) {
return (this.price * count).toFixed(2);
}
// 使用
Fruit.findAll().then(fruits =>{
const [f1] = fruits;
console.log(`买5kg${f1.name}需要¥${f1.totalPrice(5)}`,'f1.name')
})
sequlize实例 TODO List范例 https://github.com/BayliSade/TodoList
- DeleteFlg实现
- 定义模型后生成crud界面,包括有效性检查