在 Express.js 中使用 Sequelize 可以简化与数据库的交互。
1. 安装依赖
首先,确保你已经初始化了一个 Express 项目,并且安装了 Sequelize 及其对应的数据库驱动程序。
如:我使用的是MySQL
npm install sequelize mysql2
对于其他数据库,可以根据需要安装不同的驱动:
PostgreSQL: npm install sequelize pg pg-hstore
SQLite: npm install sequelize sqlite3
2.配置 Sequelize
在项目的根目录下创建一个 config 文件夹,并在里面创建一个 db.js 文件来初始化 Sequelize 连接。
具体代码
// config/db.js
const { Sequelize } = require('sequelize');
// 创建Sequelize实例,替换为你的数据库配置信息
const sequelize = new Sequelize('数据库名称(如:counter)', '数据库用户名(如:root)', '数据库密码', {
host: 'localhost',
dialect: 'mysql', // 或者 'postgres', 'sqlite', 'mssql'
});
module.exports = sequelize;
3. 创建模型
接下来,创建数据库模型。可以在 models 文件夹中为每个数据库表创建一个文件。
例如,创建一个 User 模型:
具体代码
// models/User.js
const { DataTypes } = require('sequelize');
const sequelize = require('../config/db');
const User = sequelize.define('User', {
// 定义模型属性
name: {
type: DataTypes.STRING, // 类型是STRING,可变长度字符串,SQL 数据库中,通常对应的是 VARCHAR 类型
allowNull: false, // 不允许为 NULL
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true, // 必须是唯一的
},
password: {
type: DataTypes.STRING,
allowNull: false,
}
});
module.exports = User;
4. 同步数据库
var createError = require("http-errors");
var express = require("express");
const sequelize = require("./config/db");// 该行是新增代码
const User = require("./models/User"); // 该行是新增代码
var path = require("path");
var cookieParser = require("cookie-parser");
var logger = require("morgan");
var indexRouter = require("./routes/index");
var usersRouter = require("./routes/users");
var app = express();
// view engine setup
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "jade");
app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, "public")));
// 新增代码---开始
// 同步数据库(这会根据模型创建表)
sequelize
.sync()
.then(() => {
console.log("Database & tables created!");
})
.catch((err) => {
console.error("Unable to connect to the database:", err);
});
// 一个简单的用户注册路由
app.post("/users", async (req, res) => {
try {
// 创建用户
const user = await User.create({
name: "John Doe",
email: "john@example.com",
password: "password123",
});
res.status(201).json(user);
} catch (error) {
res.status(400).json({ error: error.message });
}
});
// 新增代码---结束
app.use("/", indexRouter);
app.use("/users", usersRouter);
// catch 404 and forward to error handler
app.use(function (req, res, next) {
next(createError(404));
});
// error handler
app.use(function (err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get("env") === "development" ? err : {};
// render the error page
res.status(err.status || 500);
res.render("error");
});
module.exports = app;
提示:
一旦模型和表同步后,使用 Sequelize 可以很轻松地执行数据库操作,如 CRUD 操作。
创建记录: 使用 .create() 方法
查询记录: 使用 .findOne() 或 .findAll() 方法
更新记录: 使用 .update() 方法
删除记录: 使用 .destroy() 方法
5. 运行项目
npm start
6. 使用Postman,测试接口
7.通过Navicat Premium查看数据库
生成一个名为users的数据表
观察:通过多次尝试,发现生成数据表的名称会多加一个s,如homes
User 变为 users
Home 变为 homes