安装
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}})
}