安装
npm install --save sequelize
安装驱动程序:
npm install --save mysql2
连接到数据库
要连接到数据库,必须创建一个 Sequelize 实例. 这可以通过将连接参数分别传递到 Sequelize 构造函数或通过传递一个连接 URI 来完成:
const {Sequelize} = require("sequelize");
// 创建数据库连接
const sequelize = new Sequelize('jingmao', 'root', 'root', {
host: 'localhost',
dialect: 'mysql',
logging: false, // 生成的sql语句不在控制台打印
})
// 测试连接
async function MyFn() {
try {
await sequelize.authenticate();
console.log('Connection has been established successfully.');
} catch (error) {
console.error('Unable to connect to the database:', error);
}
}
MyFn();
Sequelize 构造函数接受很多参数. 它们记录在 API 参考中.
在 app.js 中引入文件,执行测试。
require('./dao/dbConnect')
Express 中使用 Sequelize
连接和初始化数据库
dbConnect.js
const {Sequelize} = require("sequelize");
// 创建数据库连接
const sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASSWORD, {
host: process.env.DB_HOST,
dialect: 'mysql',
logging: false, // 生成的sql语句不在控制台打印
})
// 以对象的形式暴露
module.exports = sequelize;
这里使用了 dotenv 将一些环境变量写到 .env 中,将 .env 添加到 precess.env ,便于管理。
db.js
// 初始化数据库
const sequelize = require('./dbConnect'); // 数据库连接实例
const adminModel = require('./model/adminModel');
const md5 = require("md5"); // 管理员模型
(async function() {
// 同步模型和数据表
await sequelize.sync({
alter: true
})
// 如果没有数据,则初始化数据
const adminCount = await adminModel.count()
if (!adminCount) {
await adminModel.create({
loginId: 'admin',
name: '超级管理员',
loginPwd: md5('123456'),
})
console.log('初始化管理员数据成功')
}
console.log('数据库初始化完成')
})()
adminModel.js
const {DataTypes} = require("sequelize")
const sequelize = require("../dbConnect")
// 定义数据表
module.exports = sequelize.define("admin", {
// id 自动生成 无需手动定义
loginId: {
type: DataTypes.STRING,
allowNull: false,
},
loginPwd: {
type: DataTypes.STRING,
allowNull: false,
},
name: {
type: DataTypes.STRING,
allowNull: false
}
}, {
freezeTableName: true, // 禁止默认的自动复数化
createdAt: false, // 关闭默认字段
updatedAt: false // 关闭默认字段
})
app.js
// 默认读取项目根目录下的 .env 环境变量文件
require('dotenv').config()
// 引入数据库连接
require('./dao/db')
操作数据库
const adminModel = require('./model/adminModel')
module.exports.loginDao = async function(loginInfo) {
return await adminModel.findOne({
where: {
loginId: loginInfo.loginId,
loginPwd: loginInfo.loginPwd
}
})
}