三分鐘教會(huì)你用nodejs操作mysql數(shù)據(jù)庫
步驟一:--準(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文件
步驟二:通過vs code打開app.js-----查
- 導(dǎo)入mysql
- 通過createPool方法將mysql數(shù)據(jù)庫連接到服務(wù)器,并聲明一個(gè)db變量
- 通過db.query方法測(cè)試是否連接成功
- 將數(shù)據(jù)返回給客戶端
- 導(dǎo)入express
- 創(chuàng)建服務(wù)器
- 啟動(dòng)服務(wù)器
- 注冊(cè)路由
- 通過db.query(查詢數(shù)據(jù)庫)來執(zhí)行sql語句
- 如果執(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() // 通過createPool方法連接服務(wù)器 const db = mysql.createPool({ host: '127.0.0.1', // 表示連接某個(gè)服務(wù)器上的mysql數(shù)據(jù)庫 user: 'root', // 數(shù)據(jù)庫的用戶名 (默認(rèn)為root) password: 'root', // 數(shù)據(jù)庫的密碼 (默認(rèn)為root) database: 'web67',// 創(chuàng)建的本地?cái)?shù)據(jù)庫名稱 }) // 通過nodejs獲取數(shù)據(jù)庫中的數(shù)據(jù) 并返回給客戶端------------------ app.get('/user', (req, res) => { // 通過db.query方法來執(zhí)行mysql 測(cè)試是否連接成功 // 查詢語句 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來運(yùn)行
打開Postmon 發(fā)送get請(qǐng)求,輸入http://127.0.0.1/user來驗(yàn)證是否在客戶端成功打印了數(shù)據(jù),打印成功顯示如下頁面:
步驟三:給數(shù)據(jù)庫(user)添加用戶名和密碼-----增
- 在app.js中創(chuàng)建對(duì)應(yīng)的路由
- 通過req.body來獲取客戶端提交過來的數(shù)據(jù)
- 配置中間件express.urlencoded解析表單以post方式提交過來的數(shù)據(jù)
- 構(gòu)建sql語句
- 執(zhí)行sql語句
- 如果失敗就提示用戶 判斷err如果是一個(gè)對(duì)象 就執(zhí)行失敗
- 如何知道數(shù)據(jù)已經(jīng)寫入到數(shù)據(jù)庫中?判斷受影響的行數(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 })) // 通過createPool方法連接服務(wù)器 const db = mysql.createPool({ host: '127.0.0.1', // 表示連接某個(gè)服務(wù)器上的mysql數(shù)據(jù)庫 user: 'root', // 數(shù)據(jù)庫的用戶名 (默認(rèn)為root) password: 'root', // 數(shù)據(jù)庫的密碼 (默認(rèn)為root) database: 'web67',// 創(chuàng)建的本地?cái)?shù)據(jù)庫名稱 }) // 通過nodejs獲取數(shù)據(jù)庫中的數(shù)據(jù) 并返回給客戶端------------------ app.get('/user', (req, res) => { // 通過db.query方法來執(zhí)行mysql 測(cè)試是否連接成功 // 查詢語句 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ù)(要配置中間件來解析數(shù)據(jù) 否則顯示undefind) const sql = 'insert into user set ?' // 構(gòu)建sql語句 // 執(zhí)行sql語句 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來驗(yàn)證是否在客戶端成功打印了數(shù)據(jù),打印成功顯示如下頁面:
步驟四:根據(jù)id來更新用戶名-----改
- 在app.js中創(chuàng)建對(duì)應(yīng)的路由
- 通過req.body來獲取客戶端提交過來的數(shù)據(jù)
- 配置中間件express.urlencoded解析表單以post方式提交過來的數(shù)據(jù)
- 構(gòu)建sql語句
- 執(zhí)行sql語句
- 如果失敗就提示用戶 判斷err如果是一個(gè)對(duì)象 就執(zhí)行失敗
- 如何知道數(shù)據(jù)已經(jīng)寫入到數(shù)據(jù)庫中?判斷受影響的行數(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 })) // 通過createPool方法連接服務(wù)器 const db = mysql.createPool({ host: '127.0.0.1', // 表示連接某個(gè)服務(wù)器上的mysql數(shù)據(jù)庫 user: 'root', // 數(shù)據(jù)庫的用戶名 (默認(rèn)為root) password: 'root', // 數(shù)據(jù)庫的密碼 (默認(rèn)為root) database: 'web67',// 創(chuàng)建的本地?cái)?shù)據(jù)庫名稱 }) // 通過nodejs獲取數(shù)據(jù)庫中的數(shù)據(jù) 并返回給客戶端------------------ app.get('/user', (req, res) => { // 通過db.query方法來執(zhí)行mysql 測(cè)試是否連接成功 // 查詢語句 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ù)(要配置中間件來解析數(shù)據(jù) 否則顯示undefind) const sql = 'insert into user set ?' // 構(gòu)建sql語句 // 執(zhí)行sql語句 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來更新用戶名------------------ 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來驗(yàn)證是否在客戶端成功打印了數(shù)據(jù),打印成功顯示如下頁面:
步驟五:根據(jù)id來刪除數(shù)據(jù)-----刪
- 在app.js中創(chuàng)建對(duì)應(yīng)的路由
- 通過req.params來獲取動(dòng)態(tài)參數(shù)
- 構(gòu)建sql語句
- 執(zhí)行sql語句
- 如果失敗就提示用戶 判斷 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 })) // 通過createPool方法連接服務(wù)器 const db = mysql.createPool({ host: '127.0.0.1', // 表示連接某個(gè)服務(wù)器上的mysql數(shù)據(jù)庫 user: 'root', // 數(shù)據(jù)庫的用戶名 (默認(rèn)為root) password: 'root', // 數(shù)據(jù)庫的密碼 (默認(rèn)為root) database: 'web67',// 創(chuàng)建的本地?cái)?shù)據(jù)庫名稱 }) // 通過nodejs獲取數(shù)據(jù)庫中的數(shù)據(jù) 并返回給客戶端------------------ app.get('/user', (req, res) => { // 通過db.query方法來執(zhí)行mysql 測(cè)試是否連接成功 // 查詢語句 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ù)(要配置中間件來解析數(shù)據(jù) 否則顯示undefind) const sql = 'insert into user set ?' // 構(gòu)建sql語句 // 執(zhí)行sql語句 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來更新用戶名------------------ 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來刪除數(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語句 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來驗(yàn)證是否在客戶端成功打印了數(shù)據(jù),打印成功顯示如下頁面:
步驟六:優(yōu)化刪除部分代碼-----模擬刪除
模擬刪除--假刪除:就是將數(shù)據(jù)的status狀態(tài)改為0,設(shè)置禁用;
目的:為防止數(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 })) // 通過createPool方法連接服務(wù)器 const db = mysql.createPool({ host: '127.0.0.1', // 表示連接某個(gè)服務(wù)器上的mysql數(shù)據(jù)庫 user: 'root', // 數(shù)據(jù)庫的用戶名 (默認(rèn)為root) password: 'root', // 數(shù)據(jù)庫的密碼 (默認(rèn)為root) database: 'web67',// 創(chuàng)建的本地?cái)?shù)據(jù)庫名稱 }) // 通過nodejs獲取數(shù)據(jù)庫中的數(shù)據(jù) 并返回給客戶端------------------ app.get('/user', (req, res) => { // 通過db.query方法來執(zhí)行mysql 測(cè)試是否連接成功 // 查詢語句 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ù)(要配置中間件來解析數(shù)據(jù) 否則顯示undefind) const sql = 'insert into user set ?' // 構(gòu)建sql語句 // 執(zhí)行sql語句 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來更新用戶名------------------ 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來刪除數(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語句 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來驗(yàn)證是否在客戶端成功打印了數(shù)據(jù),打印成功顯示如下頁面:
總結(jié)
到此這篇關(guān)于用nodejs操作mysql數(shù)據(jù)庫的文章就介紹到這了,更多相關(guān)nodejs操作mysql數(shù)據(jù)庫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 使用nodejs連接mySQL寫接口全過程(增刪改查)
- 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ù)庫的操作
- Nodejs中koa2連接mysql的實(shí)現(xiàn)示例
- NodeJs+MySQL實(shí)現(xiàn)注冊(cè)登錄功能
- nodejs連接mysql數(shù)據(jù)庫及基本知識(shí)點(diǎn)詳解
- nodejs實(shí)現(xiàn)的連接MySQL數(shù)據(jù)庫功能示例
- Nodejs連接mysql并實(shí)現(xiàn)增、刪、改、查操作的方法詳解
- NodeJS連接MySQL數(shù)據(jù)庫并進(jìn)行增刪改查操作詳解
相關(guān)文章
解決node.js含有%百分號(hào)時(shí)發(fā)送get請(qǐng)求時(shí)瀏覽器地址自動(dòng)編碼的問題
這篇文章主要介紹了解決node.js含有%百分號(hào)時(shí)發(fā)送get請(qǐng)求時(shí)瀏覽器地址自動(dòng)編碼的問題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11如何使用docker直接運(yùn)行不同版本nodejs命令
這篇文章主要介紹了如何使用docker直接運(yùn)行不同版本nodejs命令,在不支持高版本Node.js的舊版操作系統(tǒng)上,可以通過Docker容器技術(shù)解決兼容性問題,需要的朋友可以參考下2024-10-10深入理解Commonjs規(guī)范及Node模塊實(shí)現(xiàn)
本篇文章主要介紹了深入理解Commonjs規(guī)范及Node模塊實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05詳解Node使用Puppeteer完成一次復(fù)雜的爬蟲
這篇文章主要介紹了詳解Node使用Puppeteer完成一次復(fù)雜的爬蟲,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04