Node.js + Sequelize 全攻略
1. 安装必要的包
首先,确保你已经安装了 Node.js 和 npm,然后在你的项目目录中运行:
npm init -y # 初始化 package.json
npm install sequelize pg pg-hstore mysql2 sqlite3 # 安装 Sequelize 和数据库驱动
Sequelize 支持多种数据库:
- PostgreSQL:
pg pg-hstore
- MySQL / MariaDB:
mysql2
- SQLite:
sqlite3
- MSSQL:
tedious
根据你的数据库选择安装对应的驱动。
2. 配置 Sequelize
在项目根目录创建 config/database.js
:
const { Sequelize } = require("sequelize");
// 选择你的数据库配置
const sequelize = new Sequelize("database_name", "username", "password", {
host: "localhost", // 数据库地址
dialect: "mysql", // 数据库类型,可选 "mysql" | "postgres" | "sqlite" | "mssql"
logging: console.log, // 是否打印 SQL 语句,设为 false 关闭日志
define: {
timestamps: true, // 自动添加 createdAt 和 updatedAt
},
});
module.exports = sequelize;
3. 测试数据库连接
创建 testConnection.js
进行测试:
const sequelize = require("./config/database");
async function testConnection() {
try {
await sequelize.authenticate();
console.log("✅ Database connected successfully!");
} catch (error) {
console.error("❌ Unable to connect to the database:", error);
} finally {
await sequelize.close(); // 关闭连接
}
}
testConnection();
运行:
node testConnection.js
如果连接成功,会显示 ✅ Database connected successfully!
4. 定义模型
在 models
文件夹下创建 User.js
:
const { DataTypes } = require("sequelize");
const sequelize = require("../config/database");
const User = sequelize.define("User", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
},
username: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
isEmail: true, // 验证是否是邮箱格式
},
},
password: {
type: DataTypes.STRING,
allowNull: false,
},
}, {
tableName: "users", // 指定表名,默认 Sequelize 会用复数形式
});
module.exports = User;
5. 数据库同步
创建 syncDatabase.js
文件:
const sequelize = require("./config/database");
const User = require("./models/User");
async function syncDatabase() {
try {
await sequelize.sync({ alter: true }); // 自动同步数据库表结构
console.log("✅ Database synchronized successfully!");
} catch (error) {
console.error("❌ Database synchronization failed:", error);
} finally {
await sequelize.close();
}
}
syncDatabase();
运行:
node syncDatabase.js
这会在数据库中创建 users
表。
6. 数据库操作
创建 crud.js
进行数据库增删改查:
const User = require("./models/User");
const sequelize = require("./config/database");
async function main() {
try {
// **1. 创建用户**
const newUser = await User.create({
username: "trumpfan",
email: "trump@usa.com",
password: "maga2024",
});
console.log("✅ User created:", newUser.toJSON());
// **2. 查询用户**
const user = await User.findOne({ where: { username: "trumpfan" } });
console.log("🔍 Found user:", user ? user.toJSON() : "Not found");
// **3. 更新用户**
if (user) {
user.email = "donald@trump.com";
await user.save();
console.log("✅ User updated:", user.toJSON());
}
// **4. 删除用户**
if (user) {
await user.destroy();
console.log("🗑️ User deleted");
}
} catch (error) {
console.error("❌ Error:", error);
} finally {
await sequelize.close();
}
}
main();
运行:
node crud.js
它会 创建、查询、更新、删除 一个用户。
7. 关联(外键)
如果你想建立 用户 和 文章 之间的关系:
(1) 定义 Article
模型
在 models/Article.js
中:
const { DataTypes } = require("sequelize");
const sequelize = require("../config/database");
const User = require("./User");
const Article = sequelize.define("Article", {
title: {
type: DataTypes.STRING,
allowNull: false,
},
content: {
type: DataTypes.TEXT,
allowNull: false,
},
});
// **建立关系**
User.hasMany(Article, { foreignKey: "userId", onDelete: "CASCADE" });
Article.belongsTo(User, { foreignKey: "userId" });
module.exports = Article;
(2) 重新同步数据库
在 syncDatabase.js
里引入 Article.js
:
const Article = require("./models/Article");
然后运行:
node syncDatabase.js
8. 事务(Transactions)
使用事务确保多个数据库操作要么全部成功,要么全部回滚:
const sequelize = require("./config/database");
const User = require("./models/User");
async function transactionExample() {
const t = await sequelize.transaction();
try {
const user = await User.create({
username: "biden2024",
email: "joe@whitehouse.com",
password: "naptime",
}, { transaction: t });
// **手动提交事务**
await t.commit();
console.log("✅ Transaction committed successfully!");
} catch (error) {
// **回滚事务**
await t.rollback();
console.error("❌ Transaction failed, rolled back:", error);
} finally {
await sequelize.close();
}
}
transactionExample();
运行:
node transaction.js
9. 使用 .env
管理数据库配置
安装 dotenv
:
npm install dotenv
然后在项目根目录创建 .env
:
DB_NAME=your_database
DB_USER=your_user
DB_PASS=your_password
DB_HOST=localhost
DB_DIALECT=mysql
修改 config/database.js
读取 .env
:
require("dotenv").config();
const sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASS, {
host: process.env.DB_HOST,
dialect: process.env.DB_DIALECT,
});
10. 结论
你现在掌握了: ✅ 连接数据库
✅ 定义模型
✅ 数据操作(增删改查)
✅ 关联(外键)
✅ 事务处理
✅ 使用 .env
Sequelize 是 Node.js 里强大的 ORM,你可以用它轻松操作数据库!🚀