三分鐘教會(huì)你用nodejs操作mysql數(shù)據(jù)庫(kù)
步驟一:--準(zhǔn)備工作--
建立(projiect)文件夾
打開當(dāng)前文件下的終端--輸入命令--創(chuàng)建包管理文件
npm i npm init -y 或 npm init // 生成package.json源文件;如果項(xiàng)目文件夾命名有中文就用 npm init ,如果全英文就直接 npm init -y npm i mysql // 下載mysql npm i express // 安裝express模塊
創(chuàng)建好之后顯示如下:

創(chuàng)建app.js文件

步驟二:通過(guò)vs code打開app.js-----查
- 導(dǎo)入mysql
- 通過(guò)createPool方法將mysql數(shù)據(jù)庫(kù)連接到服務(wù)器,并聲明一個(gè)db變量
- 通過(guò)db.query方法測(cè)試是否連接成功
- 將數(shù)據(jù)返回給客戶端
- 導(dǎo)入express
- 創(chuàng)建服務(wù)器
- 啟動(dòng)服務(wù)器
- 注冊(cè)路由
- 通過(guò)db.query(查詢數(shù)據(jù)庫(kù))來(lái)執(zhí)行sql語(yǔ)句
- 如果執(zhí)行成功將數(shù)據(jù)響應(yīng)給客戶端
代碼如下:
// 導(dǎo)入mysql
const mysql = require('mysql')
// 導(dǎo)入express
const express = require('express')
// 創(chuàng)建服務(wù)器
const app = express()
// 通過(guò)createPool方法連接服務(wù)器
const db = mysql.createPool({
host: '127.0.0.1', // 表示連接某個(gè)服務(wù)器上的mysql數(shù)據(jù)庫(kù)
user: 'root', // 數(shù)據(jù)庫(kù)的用戶名 (默認(rèn)為root)
password: 'root', // 數(shù)據(jù)庫(kù)的密碼 (默認(rèn)為root)
database: 'web67',// 創(chuàng)建的本地?cái)?shù)據(jù)庫(kù)名稱
})
// 通過(guò)nodejs獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù) 并返回給客戶端------------------
app.get('/user', (req, res) => {
// 通過(guò)db.query方法來(lái)執(zhí)行mysql 測(cè)試是否連接成功
// 查詢語(yǔ)句 data 得到的是一個(gè)數(shù)組, 增刪改得到的是受影響的行數(shù)
db.query('select * from user', (err, data) => {
if (err) return console.log(err.message); // 連接失敗
if (data.length === 0) return console.log('數(shù)據(jù)為空'); // 數(shù)據(jù)長(zhǎng)度為0 則沒有獲取到數(shù)據(jù)
// 否則獲取成功,將結(jié)果返回給客戶端res.send
res.send({
status: 0,
msg: '數(shù)據(jù)獲取成功',
data
})
})
})
// 啟動(dòng)服務(wù)器
app.listen(80, () => {
console.log('running...');
})代碼驗(yàn)證:
打開當(dāng)前文件下的終端--輸入命令 -- nodemon 文件名.js

如果沒有安裝nodemon,也可以用node 文件名.js來(lái)運(yùn)行

打開Postmon 發(fā)送get請(qǐng)求,輸入http://127.0.0.1/user來(lái)驗(yàn)證是否在客戶端成功打印了數(shù)據(jù),打印成功顯示如下頁(yè)面:

步驟三:給數(shù)據(jù)庫(kù)(user)添加用戶名和密碼-----增
- 在app.js中創(chuàng)建對(duì)應(yīng)的路由
- 通過(guò)req.body來(lái)獲取客戶端提交過(guò)來(lái)的數(shù)據(jù)
- 配置中間件express.urlencoded解析表單以post方式提交過(guò)來(lái)的數(shù)據(jù)
- 構(gòu)建sql語(yǔ)句
- 執(zhí)行sql語(yǔ)句
- 如果失敗就提示用戶 判斷err如果是一個(gè)對(duì)象 就執(zhí)行失敗
- 如何知道數(shù)據(jù)已經(jīng)寫入到數(shù)據(jù)庫(kù)中?判斷受影響的行數(shù)(affectedRows)看其值是否為1 如果不是1就表示更新失敗 如果值等于1就表示更新成功
- 向客戶端響應(yīng)數(shù)據(jù)
代碼如下:


完整代碼(包含步驟二):
// 導(dǎo)入mysql
const mysql = require('mysql')
// 導(dǎo)入express
const express = require('express')
// 創(chuàng)建服務(wù)器
const app = express()
// 配置中間件
app.use(express.urlencoded({ extended: false }))
// 通過(guò)createPool方法連接服務(wù)器
const db = mysql.createPool({
host: '127.0.0.1', // 表示連接某個(gè)服務(wù)器上的mysql數(shù)據(jù)庫(kù)
user: 'root', // 數(shù)據(jù)庫(kù)的用戶名 (默認(rèn)為root)
password: 'root', // 數(shù)據(jù)庫(kù)的密碼 (默認(rèn)為root)
database: 'web67',// 創(chuàng)建的本地?cái)?shù)據(jù)庫(kù)名稱
})
// 通過(guò)nodejs獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù) 并返回給客戶端------------------
app.get('/user', (req, res) => {
// 通過(guò)db.query方法來(lái)執(zhí)行mysql 測(cè)試是否連接成功
// 查詢語(yǔ)句 data 得到的是一個(gè)數(shù)組, 增刪改得到的是受影響的行數(shù)
db.query('select * from user', (err, data) => {
if (err) return console.log(err.message); // 連接失敗
if (data.length === 0) return console.log('數(shù)據(jù)為空'); // 數(shù)據(jù)長(zhǎng)度為0 則沒有獲取到數(shù)據(jù)
// 否則獲取成功,將結(jié)果返回給客戶端res.send
res.send({
status: 0,
msg: '數(shù)據(jù)獲取成功',
data
})
})
})
// 給user中添加用戶名和密碼
app.post('/addUser', (req, res) => {
const data = req.body // 獲取數(shù)據(jù)(要配置中間件來(lái)解析數(shù)據(jù) 否則顯示undefind)
const sql = 'insert into user set ?' // 構(gòu)建sql語(yǔ)句
// 執(zhí)行sql語(yǔ)句
db.query(sql, data, (err, data) => {
if (err) return console.log(err.message); // 判斷sql是否執(zhí)行失敗
// 判斷數(shù)據(jù)是否插入成功 看affectedRows的值是否為1,不為1則寫入失敗
if (data.affectedRows !== 1) return console.log('數(shù)據(jù)寫入失敗');
// 否則寫入成功 返回客戶端
res.send({
status: 0,
msg: '數(shù)據(jù)寫入成功'
})
})
})
// 啟動(dòng)服務(wù)器
app.listen(80, () => {
console.log('running...');
})代碼驗(yàn)證:
打開當(dāng)前文件下的終端--輸入命令 -- nodemon 文件名.js

打開Postmon 發(fā)送post請(qǐng)求 ,輸入http://127.0.0.1/addUser來(lái)驗(yàn)證是否在客戶端成功打印了數(shù)據(jù),打印成功顯示如下頁(yè)面:

步驟四:根據(jù)id來(lái)更新用戶名-----改
- 在app.js中創(chuàng)建對(duì)應(yīng)的路由
- 通過(guò)req.body來(lái)獲取客戶端提交過(guò)來(lái)的數(shù)據(jù)
- 配置中間件express.urlencoded解析表單以post方式提交過(guò)來(lái)的數(shù)據(jù)
- 構(gòu)建sql語(yǔ)句
- 執(zhí)行sql語(yǔ)句
- 如果失敗就提示用戶 判斷err如果是一個(gè)對(duì)象 就執(zhí)行失敗
- 如何知道數(shù)據(jù)已經(jīng)寫入到數(shù)據(jù)庫(kù)中?判斷受影響的行數(shù)(affectedRows)看其值是否為1 如果不是1就表示更新失敗 如果值等于1就表示更新成功
- 向客戶端響應(yīng)數(shù)據(jù)
代碼如下:


完整代碼(包含步驟二、三):
// 導(dǎo)入mysql
const mysql = require('mysql')
// 導(dǎo)入express
const express = require('express')
// 創(chuàng)建服務(wù)器
const app = express()
// 配置中間件
app.use(express.urlencoded({ extended: false }))
// 通過(guò)createPool方法連接服務(wù)器
const db = mysql.createPool({
host: '127.0.0.1', // 表示連接某個(gè)服務(wù)器上的mysql數(shù)據(jù)庫(kù)
user: 'root', // 數(shù)據(jù)庫(kù)的用戶名 (默認(rèn)為root)
password: 'root', // 數(shù)據(jù)庫(kù)的密碼 (默認(rèn)為root)
database: 'web67',// 創(chuàng)建的本地?cái)?shù)據(jù)庫(kù)名稱
})
// 通過(guò)nodejs獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù) 并返回給客戶端------------------
app.get('/user', (req, res) => {
// 通過(guò)db.query方法來(lái)執(zhí)行mysql 測(cè)試是否連接成功
// 查詢語(yǔ)句 data 得到的是一個(gè)數(shù)組, 增刪改得到的是受影響的行數(shù)
db.query('select * from user', (err, data) => {
if (err) return console.log(err.message); // 連接失敗
if (data.length === 0) return console.log('數(shù)據(jù)為空'); // 數(shù)據(jù)長(zhǎng)度為0 則沒有獲取到數(shù)據(jù)
// 否則獲取成功,將結(jié)果返回給客戶端res.send
res.send({
status: 0,
msg: '數(shù)據(jù)獲取成功',
data
})
})
})
// 給user中添加用戶名和密碼------------------
app.post('/addUser', (req, res) => {
const data = req.body // 獲取數(shù)據(jù)(要配置中間件來(lái)解析數(shù)據(jù) 否則顯示undefind)
const sql = 'insert into user set ?' // 構(gòu)建sql語(yǔ)句
// 執(zhí)行sql語(yǔ)句
db.query(sql, data, (err, data) => {
if (err) return console.log(err.message); // 判斷sql是否執(zhí)行失敗
// 判斷數(shù)據(jù)是否插入成功 看affectedRows的值是否為1,不為1則寫入失敗
if (data.affectedRows !== 1) return console.log('數(shù)據(jù)寫入失敗');
// 否則寫入成功 返回客戶端
res.send({
status: 0,
msg: '數(shù)據(jù)寫入成功'
})
})
})
// 根據(jù)id來(lái)更新用戶名------------------
app.post('/updateUser', (req, res) => {
const data = req.body
const sql = 'update user set ? where id = ?'
db.query(sql, [data, data.id], (err, data) => {
if (err) return console.log(err.message);
if (data.affectedRows !== 1) return console.log('數(shù)據(jù)更新失敗');
// 數(shù)據(jù)更新成功 返回客戶端結(jié)果
res.send({
status: 0,
msg: '數(shù)據(jù)更新成功'
})
})
})
// 啟動(dòng)服務(wù)器
app.listen(80, () => {
console.log('running...');
})代碼驗(yàn)證:
打開當(dāng)前文件下的終端--輸入命令 -- nodemon 文件名.js

打開Postmon 發(fā)送post請(qǐng)求 ,輸入http://127.0.0.1/updateUser來(lái)驗(yàn)證是否在客戶端成功打印了數(shù)據(jù),打印成功顯示如下頁(yè)面:

步驟五:根據(jù)id來(lái)刪除數(shù)據(jù)-----刪
- 在app.js中創(chuàng)建對(duì)應(yīng)的路由
- 通過(guò)req.params來(lái)獲取動(dòng)態(tài)參數(shù)
- 構(gòu)建sql語(yǔ)句
- 執(zhí)行sql語(yǔ)句
- 如果失敗就提示用戶 判斷 err 如果是一個(gè)對(duì)象 則執(zhí)行失敗
- 如何知道數(shù)據(jù)已經(jīng)刪除成功 判斷受影響的行數(shù)(affectedRows)看其值是否為1,如果不為1 則刪除失敗,為1 則刪除成功
- 向客戶端響應(yīng)數(shù)據(jù)
代碼如下:


完整代碼(包含步驟二、三、四):
// 導(dǎo)入mysql
const mysql = require('mysql')
// 導(dǎo)入express
const express = require('express')
// 創(chuàng)建服務(wù)器
const app = express()
// 配置中間件
app.use(express.urlencoded({ extended: false }))
// 通過(guò)createPool方法連接服務(wù)器
const db = mysql.createPool({
host: '127.0.0.1', // 表示連接某個(gè)服務(wù)器上的mysql數(shù)據(jù)庫(kù)
user: 'root', // 數(shù)據(jù)庫(kù)的用戶名 (默認(rèn)為root)
password: 'root', // 數(shù)據(jù)庫(kù)的密碼 (默認(rèn)為root)
database: 'web67',// 創(chuàng)建的本地?cái)?shù)據(jù)庫(kù)名稱
})
// 通過(guò)nodejs獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù) 并返回給客戶端------------------
app.get('/user', (req, res) => {
// 通過(guò)db.query方法來(lái)執(zhí)行mysql 測(cè)試是否連接成功
// 查詢語(yǔ)句 data 得到的是一個(gè)數(shù)組, 增刪改得到的是受影響的行數(shù)
db.query('select * from user', (err, data) => {
if (err) return console.log(err.message); // 連接失敗
if (data.length === 0) return console.log('數(shù)據(jù)為空'); // 數(shù)據(jù)長(zhǎng)度為0 則沒有獲取到數(shù)據(jù)
// 否則獲取成功,將結(jié)果返回給客戶端res.send
res.send({
status: 0,
msg: '數(shù)據(jù)獲取成功',
data
})
})
})
// 給user中添加用戶名和密碼------------------
app.post('/addUser', (req, res) => {
const data = req.body // 獲取數(shù)據(jù)(要配置中間件來(lái)解析數(shù)據(jù) 否則顯示undefind)
const sql = 'insert into user set ?' // 構(gòu)建sql語(yǔ)句
// 執(zhí)行sql語(yǔ)句
db.query(sql, data, (err, data) => {
if (err) return console.log(err.message); // 判斷sql是否執(zhí)行失敗
// 判斷數(shù)據(jù)是否插入成功 看affectedRows的值是否為1,不為1則寫入失敗
if (data.affectedRows !== 1) return console.log('數(shù)據(jù)寫入失敗');
// 否則寫入成功 返回客戶端
res.send({
status: 0,
msg: '數(shù)據(jù)寫入成功'
})
})
})
// 根據(jù)id來(lái)更新用戶名------------------
app.post('/updateUser', (req, res) => {
const data = req.body
const sql = 'update user set ? where id = ?'
db.query(sql, [data, data.id], (err, data) => {
if (err) return console.log(err.message);
if (data.affectedRows !== 1) return console.log('數(shù)據(jù)更新失敗');
// 數(shù)據(jù)更新成功 返回客戶端結(jié)果
res.send({
status: 0,
msg: '數(shù)據(jù)更新成功'
})
})
})
// 根據(jù)id來(lái)刪除數(shù)據(jù)---------------------
app.get('/deleteData/:id', (req, res) => {
const data = req.params.id // 獲取動(dòng)態(tài)id參數(shù)
const sql = 'delete from user where id = ?' // 構(gòu)建sql語(yǔ)句
db.query(sql, data, (err, data) => {
if (err) return console.log(err.message);
if (data.affectedRows !== 1) return console.log('數(shù)據(jù)刪除失敗');
res.send({
status: 0,
msg: '數(shù)據(jù)刪除成功'
})
})
})
// 啟動(dòng)服務(wù)器
app.listen(80, () => {
console.log('running...');
})代碼驗(yàn)證:
打開當(dāng)前文件下的終端--輸入命令 -- nodemon 文件名.js

打開Postmon 發(fā)送post請(qǐng)求 ,輸入http://127.0.0.1/updateUser來(lái)驗(yàn)證是否在客戶端成功打印了數(shù)據(jù),打印成功顯示如下頁(yè)面:

步驟六:優(yōu)化刪除部分代碼-----模擬刪除
模擬刪除--假刪除:就是將數(shù)據(jù)的status狀態(tài)改為0,設(shè)置禁用;
目的:為防止數(shù)據(jù)完全刪除之后無(wú)法找回;
代碼如下:

最終展示完整代碼(包含以上所有步驟):
// 導(dǎo)入mysql
const mysql = require('mysql')
// 導(dǎo)入express
const express = require('express')
// 創(chuàng)建服務(wù)器
const app = express()
// 配置中間件
app.use(express.urlencoded({ extended: false }))
// 通過(guò)createPool方法連接服務(wù)器
const db = mysql.createPool({
host: '127.0.0.1', // 表示連接某個(gè)服務(wù)器上的mysql數(shù)據(jù)庫(kù)
user: 'root', // 數(shù)據(jù)庫(kù)的用戶名 (默認(rèn)為root)
password: 'root', // 數(shù)據(jù)庫(kù)的密碼 (默認(rèn)為root)
database: 'web67',// 創(chuàng)建的本地?cái)?shù)據(jù)庫(kù)名稱
})
// 通過(guò)nodejs獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù) 并返回給客戶端------------------
app.get('/user', (req, res) => {
// 通過(guò)db.query方法來(lái)執(zhí)行mysql 測(cè)試是否連接成功
// 查詢語(yǔ)句 data 得到的是一個(gè)數(shù)組, 增刪改得到的是受影響的行數(shù)
db.query('select * from user', (err, data) => {
if (err) return console.log(err.message); // 連接失敗
if (data.length === 0) return console.log('數(shù)據(jù)為空'); // 數(shù)據(jù)長(zhǎng)度為0 則沒有獲取到數(shù)據(jù)
// 否則獲取成功,將結(jié)果返回給客戶端res.send
res.send({
status: 0,
msg: '數(shù)據(jù)獲取成功',
data
})
})
})
// 給user中添加用戶名和密碼------------------
app.post('/addUser', (req, res) => {
const data = req.body // 獲取數(shù)據(jù)(要配置中間件來(lái)解析數(shù)據(jù) 否則顯示undefind)
const sql = 'insert into user set ?' // 構(gòu)建sql語(yǔ)句
// 執(zhí)行sql語(yǔ)句
db.query(sql, data, (err, data) => {
if (err) return console.log(err.message); // 判斷sql是否執(zhí)行失敗
// 判斷數(shù)據(jù)是否插入成功 看affectedRows的值是否為1,不為1則寫入失敗
if (data.affectedRows !== 1) return console.log('數(shù)據(jù)寫入失敗');
// 否則寫入成功 返回客戶端
res.send({
status: 0,
msg: '數(shù)據(jù)寫入成功'
})
})
})
// 根據(jù)id來(lái)更新用戶名------------------
app.post('/updateUser', (req, res) => {
const data = req.body
const sql = 'update user set ? where id = ?'
db.query(sql, [data, data.id], (err, data) => {
if (err) return console.log(err.message);
if (data.affectedRows !== 1) return console.log('數(shù)據(jù)更新失敗');
// 數(shù)據(jù)更新成功 返回客戶端結(jié)果
res.send({
status: 0,
msg: '數(shù)據(jù)更新成功'
})
})
})
// 根據(jù)id來(lái)刪除數(shù)據(jù)---------------------
app.get('/deleteData/:id', (req, res) => {
const data = req.params.id // 獲取動(dòng)態(tài)id參數(shù)
const sql = 'update user set status = 0 where id = ?' // 構(gòu)建sql語(yǔ)句
db.query(sql, data, (err, data) => {
if (err) return console.log(err.message);
if (data.affectedRows !== 1) return console.log('數(shù)據(jù)刪除失敗');
res.send({
status: 0,
msg: '數(shù)據(jù)刪除成功'
})
})
})
// 啟動(dòng)服務(wù)器
app.listen(80, () => {
console.log('running...');
})代碼驗(yàn)證:
打開當(dāng)前文件下的終端--輸入命令 -- nodemon 文件名.js

打開Postmon 發(fā)送post請(qǐng)求 ,輸入http://127.0.0.1/updateUser來(lái)驗(yàn)證是否在客戶端成功打印了數(shù)據(jù),打印成功顯示如下頁(yè)面:

總結(jié)
到此這篇關(guān)于用nodejs操作mysql數(shù)據(jù)庫(kù)的文章就介紹到這了,更多相關(guān)nodejs操作mysql數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 使用nodejs連接mySQL寫接口全過(guò)程(增刪改查)
- nodejs+mysql實(shí)現(xiàn)用戶相關(guān)的增刪改查的詳細(xì)操作
- Nodejs?連接?mysql時(shí)報(bào)Error:?Cannot?enqueue?Query?after?fatal?error錯(cuò)誤的處理辦法
- NodeJs操作MYSQL方法詳細(xì)介紹
- nodejs中關(guān)于mysql數(shù)據(jù)庫(kù)的操作
- Nodejs中koa2連接mysql的實(shí)現(xiàn)示例
- NodeJs+MySQL實(shí)現(xiàn)注冊(cè)登錄功能
- nodejs連接mysql數(shù)據(jù)庫(kù)及基本知識(shí)點(diǎn)詳解
- nodejs實(shí)現(xiàn)的連接MySQL數(shù)據(jù)庫(kù)功能示例
- Nodejs連接mysql并實(shí)現(xiàn)增、刪、改、查操作的方法詳解
- NodeJS連接MySQL數(shù)據(jù)庫(kù)并進(jìn)行增刪改查操作詳解
相關(guān)文章
node npm yarn報(bào)錯(cuò)error:不是內(nèi)部或外部命令
文章介紹了如何安裝和配置Node.js、npm和yarn,并解決無(wú)法正常使用的問(wèn)題,主要步驟包括:正確安裝環(huán)境變量、配置用戶變量和系統(tǒng)變量、設(shè)置全局安裝模塊和緩存目錄的環(huán)境變量,以及手動(dòng)配置yarn的環(huán)境變量2024-11-11
NodeJS模塊與ES6模塊系統(tǒng)語(yǔ)法及注意點(diǎn)詳解
這篇文章主要給大家介紹了關(guān)于NodeJS模塊與ES6模塊系統(tǒng)語(yǔ)法及注意點(diǎn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01
深入理解Commonjs規(guī)范及Node模塊實(shí)現(xiàn)
本篇文章主要介紹了深入理解Commonjs規(guī)范及Node模塊實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
node.js利用socket.io實(shí)現(xiàn)多人在線匹配聯(lián)機(jī)五子棋
這篇文章主要介紹了node.js利用socket.io實(shí)現(xiàn)多人在線匹配聯(lián)機(jī)五子棋的操作方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05
如何從頭實(shí)現(xiàn)一個(gè)node.js的koa框架
這篇文章主要介紹了如何從頭實(shí)現(xiàn)一個(gè)node.js的koa框架,koa.js是最流行的node.js后端框架之一,有很多網(wǎng)站都使用koa進(jìn)行開發(fā),同時(shí)社區(qū)也涌現(xiàn)出了一大批基于koa封裝的企業(yè)級(jí)框架。,需要的朋友可以參考下2019-06-06
如何在node.js中使用?JsonWebToken模塊進(jìn)行token加密
目前在web框架中最流行的身份驗(yàn)證是使用jsonwebtoken,簡(jiǎn)稱jwt.可以設(shè)置加密方式,過(guò)期時(shí)間,存放個(gè)人信息,逆解析,下面這篇文章主要給大家介紹了關(guān)于如何在node.js中使用?JsonWebToken模塊進(jìn)行token加密的相關(guān)資料,需要的朋友可以參考下2023-03-03

