215-node连接Sequelize


Node.js + Sequelize 全攻略

1. 安装必要的包

首先,确保你已经安装了 Node.jsnpm,然后在你的项目目录中运行:

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,你可以用它轻松操作数据库!🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值