使用sequelize的好处是它可以帮我们把关系数据库的表结构映射到对象上,从而使对sql语句不太懂的同学上手起来也不那么困难。
之所以单独开一篇来讲sequelize,是防止有些同学没有接触过sequelize,后续会搭配放百度云这项目去使用哟。
好了话不多说,马上开始。
本篇涉及到的技术:
window端 mysql环境配置(已有环境的可以跳过)
1.去mysql官网下一个mysql,下载完成后将其解压到自定义目录下。
2.随后,配置环境变量(我的电脑点右键,然后点属性,然后点击环境变量),步骤如下:
此时,环境变量配置完成,接下来进行安装mysql的操作。
3.在安装目录下创建一个my.ini文件,文件内容如下:
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=E:\\Program Files\mysql-8.0.21-winx64
# 设置mysql数据库的数据的存放目录
datadir=E:\\Program Files\mysql-8.0.21-winx64\Data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
4.用管理员身份打开cmd窗口,然后先给mysql服务创建名称(方便到时候建立多个mysql服务时不冲突)
mysqld --install mysql1
5.初始化mysql
sqld --initialize --console
记住初始化localhost后面跟着的那串字符串
假如没记住,把根目录下生成的data删掉,删掉,然后在初始化一次.
有些人会出现140.dll的错误,那是缺少了vc++的运行库,这里有下载地址
6.启动服务
net start mysql1
启动成功之后我们就可以登进去看看了
mysql -uroot -p
弹出需要你输入密码,你就输入第五步的初始化生成的那串字符串,输入回车之后输出这样的日志,就证明登录成功了
7.修改初始化密码
ALTER USER 'root'@'localhost' identified by '新密码' ;
8.测试工具测试
mysql基本配置
使用express创建一个项目,并且安装mysql,创建库在可视化navicat 工具上创建一个库名为disc
express mysqltx
cd mysqltx
npm i
npm i mysql -S
mysql创建连接对象API createConnection(options)
options基本配置对象有
- host: 主机
- user: 数据库账号
- password:密码
- database:数据库名称
我们在根目录下新增db目录,并且创建config.js、index.js两个文件,并且写两个查询语句
config.js
module.exports = {
host: 'localhost',
user: 'root',
password: '',
database: 'disc'
}
index.js
const mysql = require('mysql')
const config = require('./index')
// const {debug} = require('../tool/constant')
const debug = true // 是否开启debag 错误日志
function connect() {
return mysql.createConnection({ // 连接mysql
...config,
multipleStatements: true // 同时执行多条语句
})
}
function querySql(sql) { // 查询语句
const conn = connect()
debug && console.log(sql)
return new Promise((resolve, reject) => {
try {
conn.query(sql, (err, reuslt) => {
if (err) {
debug && console.log('查询失败' + JSON.stringify(err))
} else {
debug && console.log('查询成功' + JSON.stringify(reuslt))
resolve(reuslt)
}
})
} catch (err) {
reject(err)
} finally {
conn.end()
}
})
}
function queryOne(sql) {
return new Promise((resolve, reject) => {
querySql(sql).then(result => {
if (result && result.length > 0) {
resolve(result[0])
} else {
resolve(null)
}
}).catch(err => {
reject(err)
})
})
}
module.exports = {
querySql,
queryOne
}
用法
const { querySql, queryOne } = require('../db/config')
function login(username, password) {
return querySql(`select * from admin_user where username='${ username }' and password='${ password }'`)
}
function findUser(username) {
return queryOne(`select * from admin_user where username='${ username }'`)
}
module.exports = {
login,
findUser
}
对于不熟悉mysql语句的前端小伙伴是不是看的两眼发懵,而且这是最简单的条件查询而已
使用sequelize操作mysql
npm i sequelize -S
sequelize基本配置
const Sequelize = require('sequelize')
const sqlConfig = { // mysql 基本配置
host: 'localhost',
user: 'root',
password: 'root',
database: 'network_disk'
}
console.log('init sequelize...')
const sequelize = new Sequelize(sqlConfig.database, sqlConfig.user, sqlConfig.password, { // 连接mysql
host: sqlConfig.host,
dialect: 'mysql',
pool: {
max: 10,
min: 0,
idle: 10000
},
timezone: '+08:00'
})
exports.sequelize = sequelize // 抛出sequelize实例
exports.defineModel = (name, attributes) => {
const attrs = {}
for (const key in attributes) { // 循环表字段
const val = attributes[key]
if (typeof val === 'object' && val['type']) {
val.allowNull = val.allowNull || true
attrs[key] = val
} else {
attrs[key] = {
type: val
}
}
}
attrs.version = {
type: Sequelize.BIGINT
}
return sequelize.define(name, attrs, { // 表默认配置
tableName: name,
timestamps: true,
paranoid: true,
charset: 'utf8mb4',
collate: 'utf8mb4_general_ci',
hooks: {
beforeBulkCreate: (obj) => {
obj.version = 0
},
beforeValidate: (obj) => {
obj.isNewRecord ? obj.version = 0 : obj.version = obj.version + 1
}
}
})
}
接下来我们用对象描述一个表,并创建它
const Sequelize = require('sequelize')
const db = require('./index') // 引入刚刚写的sequelize配置
module.exports = db.defineModel('user_list', {
u_id: { type: Sequelize.INTEGER, allowNull: false, primaryKey: true, unique: true, autoIncrement: true },
u_name: { type: Sequelize.STRING },
u_email: { type: Sequelize.STRING },
u_capacity: { type: Sequelize.INTEGER(), defaultValue: 10 }, // 容量
u_password: { type: Sequelize.STRING, defaultValue: 123456 },
u_pic: { type: Sequelize.STRING(), defaultValue: 'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png' } // 用户头像
})
我们简单的使用他的一个查询功能看看
const UserList = require('../db/user_list') // 引入表实例
fileList.sync({ // 创建表
force: true
})
UserList.findOne({
where: { u_name: '', u_password: '' }
}).then(res => { // 成功
}).catch(err => { // 失败
})
这样是不是比写sql语句来说更加的友好,就跟使用mongoose差不多语法,写起来也舒服
此篇章是mysql的配置以及搭配sequelize去使用,后续篇幅的话会用到。
此篇幅的关联文章