课程名称:Node.js-Koa2框架生态实战-从零模拟新浪微博
课程章节:第2章 技术选型和知识点介绍(上)2-12 2-13
课程讲师:双越
课程内容:
Sequelize 是一个基于 Promise的 Node.js ORM 框架,用于 Postgres、Mysql、Mariadb、Sqlite 和 Microsoft SQL Server。它具有可靠的事务支持、关系、紧急和延迟加载、读取复制等功能。
npm install --save sequelize mysql2
Sequelize 操作数据库依赖于具体的数据库驱动,mysql2 包是 Mysql 数据库的驱动
// src/configs/db.config.js let MYSQL_CONF = { host: '127.0.0.1', port: 3306, database: 'koa_weibo', user: 'root', password: 'root123' } module.exports = { MYSQL_CONF }
// src/db/seq.js const Sequelize = require('sequelize'); const {database, host, port, user, password} = require('../configs/db.config').MYSQL_CONF; // 创建sequelize连接 const seq = new Sequelize(database, user, password, { host, port, // 默认是3306,可省略 dialect: 'mysql' // 指定要连接哪种类型的数据库,这里要操作的是mysql }); // 测试连接 // 使用 authenticate() 测试连接是否成功 seq.authenticate().then(() => { console.log('mysql连接成功'); }).catch(err => { console.log(err); }) module.exports = seq;
Sequelize 将默认保持连接持续,并对所有查询使用相同的连接。如果需要关闭连接,可以调用 sequelize.close()
(这是异步的,并返回Promise).
开发环境下,我们就使用这种默认的持久连接。在生产环境下,我们将使用连接池来做优化。
const Sequelize = require('sequelize'); const seq = require('./seq'); // 定义User Model,对应数据库中的user表 const User = seq.define('user', { // 如果不手动创建id,sequelize会自动创建id字段,并且设为主键、自增 username: { type: Sequelize.STRING, // 对应数据库的varchar(255), allowNull: false // 字段非空 }, password: { type: Sequelize.STRING, allowNull: false }, nickname: { type: Sequelize.STRING, comment: '昵称' // 给字段加注释 } // sequelize会自动创建createdAt和updatedAt字段 }); module.exports = User;
Sequelize生成表时,默认生成的表名都是复数,而且很智能,自动加s或者变y为ies,如果非规则变形,比如tooth,也会自动将表命名为teeth。如果单词本身就是复数,就不变了。
课程收获:
这节课学习了在 Nodejs 中使用 Sequelize 来连接 Mysql 数据库,以及建立用户模型。模型 Model 就对应一张数据表,后续操作数据库,就是通过 Model 去实现的。