? ? ? ?本文章的前提是电脑上已经安装好nodejs和mysql,另外我还安装了Navicat(一个可视化的数据库管理工具,还蛮好用的,可以从官方下载)
? ? ?对数据库进行操作,首先需要有一个数据库,下面就是数据库的相关信息
一: 在项目中操作数据库的步骤
-
安装操作 MySQL 数据库的第三方模块(mysql ) -
通过 mysql 模块连接到 MySQL 数据库 -
通过 mysql 模块执行 SQL 语句
? 1.1安装 mysql 模块
//安装mysql 为项目依赖包
npm i mysql
//或者
yarn add mysql
2.配置 mysql 模块
通过createPool() 方法,建立与数据库连接
// 1. 导入 mysql 模块
var mysql = require('mysql')
// 导入express模块 (下载express 第三方包)
const express = require('express')
// 创建服务器
const app = express()
// 2. 建立与 mysql 数据库的连接
var db = mysql.createPool({
host: '127.0.0.1', // 数据库的 ip 地址
user: 'root', // 登录数据库的账号
password: 'root', // 登录数据库的密码
database: 'my01' // 指定要操作哪个数据库
})
//这里就是增删改查的地方啦
// 启动服务器
app.listen(80, () => {
console.log('http://127.0.0.1');
})
?其中?creatPool中的参数? 还有很多配置项...
配置参数实在有点多 ,感兴趣的小伙伴可自行测试哦~?
host | 主机地址 (默认:localhost) | user | 数据库用户名 | password | 密码 | port | 端口号(默认为3306) | database | 数据库名 | connectTimeout | 连接超时(默认:不限制;单位:毫秒) | multipleStatements | 是否许一个query中有多个MySQL语句 (默认:false) | localAddress | 此IP用于TCP连接(可选) | charset | 连接字符集(默认:'UTF8_GENERAL_CI',注意字符集的字母都要大写) | socketPath | 连接到unix域路径,当使用 host 和port 时会被忽略 | timezone | 时区(默认:'local') | stringifyObjects | 是否序列化对象(默认:'false' ;与安全相关) | typeCast | 是否将列值转化为本地JavaScript类型值 (默认:true) | queryFormat | 自定义query语句格式化方法 | supportBigNumbers | 数据库支持bigint或decimal类型列时,需要设此option为true (默认:false) | bigNumberStrings | supportBigNumbers和bigNumberStrings启用 强制bigint或decimal列以JavaScript字符串类型返回(默认:false) | dateStrings | 强制timestamp,datetime,data类型以字符串类型返回,而不是JavaScriptDate类型(默认:false) | debug | 开启调试(默认:false) | flags | 用于修改连接标志 | ssl | 使用ssl参数(与crypto.createCredenitals参数格式一至)或一个包含ssl配置文件名称的字符串,目前只捆绑Amazon RDS的配置文件 |
?
2.2测试?连接是否成功
通过db.query 方法测试是否连接成功 (启动服务器)
// 测试mysql 模块能够正常运行 通过bd.query()
db.query('users', (err, data) => {
// mysql 模块如果错误,err 中会返回错误信息
if (err) return console.log(err.message);
// 能够成功的执行 SQL 语句
console.log(data)
})
?3. 通过 mysql 模块执行 SQL 语句
? 3.1 使用 select 语句查询数据
? ? ? select 列名称 from 表名称
// 挂载路由 发送get请求
app.get('/get', (req, res) => {
// sql语句 查询数据 select 列名称 from 表名称
db.query('select * from users', (err, data) => {
//err为对象时 表示 连接数据库失败 打印错误信息
if (err) return console.log(err.message);
//当数据库中数据data长度为0 时
if (data.length === 0) return console.log('数据库中没有数据');
// console.log(data);
res.send({
status: 0,
msg: '数据获取成功',
data
})
})
})
3.2? 使用 insert into?向数据库中 添加数据
insert into 表名(字段1, 字段2) values ('值1', '值2') insert into 表名 set ?字段1 = 值1,字段2?= '值2';
// 配置中间件 `express.urlencoded`解析表单以post方式提交过来的数据
//(在所有路由之前设置)
app.use(express.urlencoded({
extended: false
}))
// 利用postman 传递的数据 名要与数据库中字段一致
// 向数据库中增加数据行 发送post请求
app.post('/dataAdd', (req, res) => {
//通过`req.body`来获取客户端提交过来的数据
const data = req.body
// 构建sql语句 ?表示占位符
const sql = 'insert into users set ?'
// data是数组形式 传递数据
db.query(sql, data, (err, data) => {
// 判断sql是否连接成功
if (err) return console.log(err.message);
//判断受影响的行数 (affectedRows) 看其值是不是1 不为1则写入失败
if (data.affectedRows !== 1) return console.log('写入数据失败');
// 如果成功 响应给客户端
res.send({
status: 0,
msg: '数据写入成功',
})
})
})
3.3? 使用?update?修改指定数据
update?表名称 set?列名称=新值??where?列名称=某值
//根据id 修改数据库中的数据 post请求
app.post('/updata', (req, res) => {
// 接收客户端响应的数据
const data = req.body
// 构建sql语句
const sql = 'update users set ? where id=?'
// 调用bd.query 指定要执行的sql语句
db.query(sql, [data, data.id], (err, data) => {
// err为对象是 sql语句执行失败
if (err) return console.log(err.message);
// data.affectedRows !== 1 表示 没有被修改的行
if (data.affectedRows !== 1) return console.log('更新数据失败');
// 更新成功
res.send({
status: 0,
msg: '更新成功'
})
})
})
3.4?使用?delect?语句?删除指定数据
delect?from?表名?where?列名=值
// 根据id删除 数据库中的数据
// 利用获取动态参数的方式 req.params
app.get('/delete/:id', (req, res) => {
// 获取客户端提交的id 参数
const {
id
} = req.params
//删除的sql语句 (通常不直接删除)
const sql ='delect from users where id=?'
// 调用db.query 指定要执行的sql语句
db.query(sql, id, (err, data) => {
if (err) return console.log(err.message);
if (data.affectedRows !== 1) return console.log('删除失败');
res.send({
status: 0,
msg: '删除成功'
})
})
})
// 删除功能 利用update 改变status值 来标记删除 status=0表示被禁用
//将删除的sql语句 替换为如下的语句 进行删除标记
const sql = 'update users set status=0 where id=?'
总结:以上就是利用 Nodejs操作MySQL之增删改查了?
|