> 文章列表 > sequelize + Nodejs + MySQL 的简单用法

sequelize + Nodejs + MySQL 的简单用法

sequelize + Nodejs + MySQL 的简单用法

How to Use Sequelize ORM in NodeJS - Tutorial

1 Sequlize 简介

Sequelize 是最流行的可以与 Nodejs 一起使用的一种关系数据库 ORM (Object-relational mapping 对象关系映射),Mongoose 是 MongoDB 的 ORM.

在这里插入图片描述

Sequelize 的作用,简单地说,就是避免在代码里写原生 SQL 语句,而是将这种语句改成 JavaScript:
在这里插入图片描述

不必再写类似下面这样含有 SELECT 或者 DELETE 等语句的代码:

app.get("/employees", (req, res) => {db.query("SELECT * from employees", (err, result) => {if (err) {console.log(err);} else {res.send(result);}});
});

2. 使用 Nodejs,Sequlize,和 MySql

2.1. 新建 node 工程

运行以下命令初始化工程,并安装 express, sequelize:
npm init --y
npm install express sequelize

2.2 安装 MySQL 驱动

与各种数据库相对应的驱动安装命令如下:

$ npm install --save pg pg-hstore # Postgres
$ npm install --save mysql2
$ npm install --save mariadb
$ npm install --save sqlite3
$ npm install --save tedious # Microsoft SQL Server
$ npm install --save oracledb # Oracle Database

运行 npm i mysql2.

这里安装的是 mysql2 而不是 mysql,如果直接使用 SQL 语句与 MySQ L交互,安装 mysql,使用 sequelize 则安装 mysql2mysqlmysql2之间的区别基本在于Promise,即使用 mysql2 包可以写异步 JS 代码。

2.3 安装 Sequelize CLI 工具

npm i -g sequelize-cli ,这里必须加-g选项, 否则终端不会识别 sequlize.

使用 sequelize-cli 能自动生成一些配置文件,从而节省时间。

终端运行命令 sequelize init

PS D:\\yt\\node-mysql-sequelize> sequelize initSequelize CLI [Node: 16.14.0, CLI: 6.6.0, ORM: 6.31.0]Created "config\\config.json"
Successfully created models folder at "D:\\yt\\node-mysql-sequelize\\models".
Successfully created migrations folder at "D:\\yt\\node-mysql-sequelize\\migrations".
Successfully created seeders folder at "D:\\yt\\node-mysql-sequelize\\seeders".

工程文件夹下自动生成一些文件夹,删除此项目不会用到的seedersmigrations,保留 configmodels

2.4 修改config/config.json

"development" 部分代码修改如下

"development": {"username": "root","password": "password111","database": "mySequelizeDB","host": "localhost","dialect": "mysql"
},

这里的 mysql 可以改成任何其他使用的数据库,例如如果使用 Postgres 就改成 postgres.

2.5 增加文件 models/User.js

Sequlize 基于model 在数据库种创建表,User.js 将映射到一个 User 表。
要创建多少个表,就写多少个model,这个User表只定义了两列,firstNameage
User.js:

module.exports = (sequelize, DataTypes) => {const User = sequelize.define("User", {firstName: {type: DataTypes.STRING,allowNull: false,validate: {notEmpty: true,},},age: {type: DataTypes.INTEGER,allowNull: false,validate: {notEmpty: true,},},});return User;
};

2.6 server.js 代码

定义了一些 route,以实现用户的读取、创建和删除,因为只用浏览器简单测试,所以创建删除用户也是用的 get

const express = require("express");
const app = express();const db = require("./models");
const { User } = require("./models");// 查看全部用户
app.get("/select", (req, res) => {User.findAll().then((users) => {res.send(users);}).catch((err) => {console.log(err);});
});// 查看名字为 "Elisa" 的用户,
app.get("/select-name", (req, res) => {User.findAll({ where: { firstName: "Elisa" } }).then((users) => {res.send(users);}).catch((err) => {console.log(err);});
});// 创建用户
app.get("/insert", (req, res) => {User.create({firstName: "Elisa",age: 22,}).catch((err) => {res.status(401).json({ message: "Inserted failed." });});res.json({ message: "Inserted success." });
});// 删除第一个用户
app.get("/delete", (req, res) => {User.destroy({ where: { id: 1 } });res.json({ message: "deleted" });
});db.sequelize.sync().then((req) => {app.listen(3001, () => {console.log("Server running at port 3001................");});
});

2.7 启动 MySQL

工程根目录下创建 docker-compose.yaml:

version: "3.9"services:db:image: mysql:5.7volumes:- db_data:/var/lib/mysqlrestart: alwaysenvironment:MYSQL_DATABASE: mySequelizeDBMYSQL_ROOT_PASSWORD: password111MYSQL_USER: aliceMYSQL_PASSWORD: password111ports:- "3306:3306"volumes:db_data:

运行 docker compose up -d 启动 MySQL 容器 (运行 docker compose down -v 删除容器及命名卷。)
这里的用户名及密码等必须与 2.4 中的一致。

2.8 运行 Node app

运行 node server.js, 可以使用浏览器测试各种 route,结果也可以通过 MySQL Workbench 直接查看数据库。