当前位置: 首页 > news >正文

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 直接查看数据库。

http://www.lryc.cn/news/62131.html

相关文章:

  • Android Jetpack - Navigation 组件:进行应用程序导航
  • MySQL的binlog原理和它的几种使用方法
  • 40岁以上的程序员还容易找到工作吗?聊聊我自己的亲身经历
  • Class类
  • Python小姿势 - 可选知识点:
  • Javaee Spring的AOP简介
  • 基于ansible初始化linux服务器基础环境。
  • leetcode-数据库题
  • [元来学NVMe协议] NVMe IO 指令集(NVM 指令集)| Flush 命令
  • 信息的相关性和冗余度:信息在整个文明中的作用
  • python数据结构与算法-动态规划(最长公共子序列)
  • Java版企业电子招投标系统源码 Spring Cloud+Spring Boot 电子招标采购系统功能清单
  • 【c语言】函数的基本概念 | 函数堆栈调用原理
  • Vue.prototype 详解及使用
  • 音视频八股文(3)--ffmpeg常见命令(2)
  • 使用bert4keras出现的问题(Process finished with exit code -1073741819 (0xC0000005))
  • python协程实战
  • 【论文笔记】VideoGPT: Video Generation using VQ-VAE and Transformers
  • scala之基础面向对象
  • Qt5.12实战之多线程编程概念
  • 格式化数据恢复怎么做?超实用的3种方法在这!
  • 【Java|golang】1105. 填充书架---动态规划
  • linux基础命令
  • 【三十天精通Vue 3】 第十八天 Vue 3的国际化详解
  • 02 - 学会提问
  • Java经典的Main方法面试题
  • 世界大学电子电气工程TOP10,国内大学哪家强?
  • 5.3 牛顿-科茨公式
  • 全注解下的SpringIoc 续2-bean的生命周期
  • 【VQ-VAE代码实战】Neural Discrete Representation Learning