開(kāi)箱即用的Node.js+Mysql模塊封裝實(shí)現(xiàn)詳解
前言
最近在寫(xiě)畢設(shè),采用的是學(xué)弟+自己的技術(shù)棧,運(yùn)用Vue3+ElementPlus搞前端,Node.js express做后端,畢竟,java那東西確實(shí)不在我技術(shù)棧里。
于是乎,我抱著能CV就不要自己敲的心態(tài),前去了某C站,C回了一個(gè)封裝好了看上去存在可用性的基礎(chǔ)sql模塊,結(jié)果,踩了大坑。
痛定思痛,我采用了學(xué)弟+騰訊會(huì)議的debug方式,于事發(fā)當(dāng)天下午,花費(fèi)了一個(gè)小時(shí),成功搭建出了一個(gè)簡(jiǎn)單易用,小學(xué)難度的一個(gè)操作數(shù)據(jù)庫(kù)的小模塊。
領(lǐng)略過(guò)下雨的痛,所以勇敢站出來(lái)為別人打傘,如果你只是想單純的用他做一些簡(jiǎn)單的東西,那么大膽用,CV用!
正文
項(xiàng)目目錄
只是單獨(dú)把數(shù)據(jù)庫(kù)模塊拎出來(lái)了
├─index.js ├─db | ├─db.js //封裝的操作函數(shù) | ├─dbconfig.js //數(shù)據(jù)庫(kù)配置 | └sql.js //sql語(yǔ)句
sql.js
主要是存放一些操作表的sql語(yǔ)句,這里只是放了一個(gè)表,多個(gè)表也可以~
//單純的栗子
let user = {
insert: "INSERT INTO user(id, name, age) VALUES(?,?,?)",
update: "UPDATE user SET name=?, age=? WHERE id=?",
delete: "DELETE FROM user WHERE id=?",
queryById: "SELECT * FROM user WHERE id=?",
queryAll: "SELECT * FROM user",
};
module.exports = {
user,
};
dbconfig.js
數(shù)據(jù)庫(kù)的配置,服務(wù)器上的就寫(xiě)服務(wù)器的,本地的就寫(xiě)本地的,都可以都可以
let mysqlConfig = {
host: "1.2.3.4",
user: "******",
password: "******",
port: "******",
database: "******",
};
module.exports = mysqlConfig
db.js
先引入
const mysql = require("mysql");
const $dbConfig = require("./dbconfig.js"); //注意改成自己項(xiàng)目中的路徑
const sql = require("./sql.js");
const pool = mysql.createPool($dbConfig); // 使用連接池
增
let dbAdd = (table, req, res, next) => {
return new Promise((resolve,reject)=>{
pool.getConnection((err, connection) => {
let paramValue = paramList(req);
connection.query(sql[table].insert, [...paramValue], (err, result) => {
if(err){
reject(err)
}
resolve(result)
connection.release();
});
});
})
};
刪
let dbDelete = (table, req, res, next) => {
let paramValue = paramList(req);
return new Promise((resolve,reject)=>{
pool.getConnection((err, connection) => {
connection.query(sql[table].delete, [...paramValue], (err, result) => {
if(err){
reject(err)
}
resolve(result)
connection.release();
});
});
})
};
改
let dbUpdate = (table, req, res, next) => {
let paramValue = paramList(req);
return new Promise((resolve,reject)=>{
pool.getConnection((err, connection) => {
connection.query(sql[table].update, [...paramValue], (err, result) => {
if(err){
reject(err)
}
resolve(result)
connection.release();
});
});
})
};
查一個(gè)
let dbQueryById = (table, req, res, next) => {
let paramValue = paramList(req);
return new Promise((resolve,reject)=>{
pool.getConnection((err, connection) => {
connection.query(sql[table].queryById, [...paramValue], (err, result) => {
if(err){
reject(err)
}
resolve(result)
connection.release();
});
});
})
};
查全部
let dbQueryAll = (table, req, res, next) => {
return new Promise((resolve,reject)=>{
pool.getConnection((err, connection) => {
connection.query(sql[table].queryAll, (err, result) => {
if(err){
reject(err)
}
resolve(result)
connection.release();
});
});
})
};
paramList
connection.query的第二個(gè)參數(shù)要求傳數(shù)組,為了怕bug,將傳入的對(duì)象給他變成一個(gè)數(shù)組返回回去 示例:mysqljs-https://github.com/mysqljs/mysql#custom-format
let paramList = (obj) => {
let paramArr = [];
for (let key in obj) {
if (obj[key]) {
paramArr.push(obj[key]);
}
}
return paramArr;
};
如何使用
下面移步到index.js,引入我就不在寫(xiě)一次了,大家自己引入就好。
app.post("/login",async (req,res) =>{
const {username,password} = req.body // 接收數(shù)據(jù)
try {
//看這里, 我們使用username的方式去數(shù)據(jù)庫(kù)進(jìn)行用戶查找
const {data} = await db.dbQueryById("user",{"username":username},res)
// 接下來(lái)自己想象吧
} catch (err) {
res.json({
code: "500",
msg: "用戶不存在"
});
}
})
搞定
再次吐槽一下,去百度各種搜,查閱時(shí)候的痛苦,以上就是開(kāi)箱即用的Node.js+Mysql模塊封裝實(shí)現(xiàn)詳解的詳細(xì)內(nèi)容,更多關(guān)于Node.js+Mysql模塊封裝的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解node+express+ejs+bootstrap構(gòu)建項(xiàng)目
本篇文章主要介紹了詳解node+express+ejs+bootstrap構(gòu)建項(xiàng)目,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-09-09
node.js實(shí)現(xiàn)回調(diào)的方法示例
這篇文章主要介紹了node.js實(shí)現(xiàn)回調(diào)的方法,結(jié)合實(shí)例形式分析了node.js實(shí)現(xiàn)向回調(diào)函數(shù)傳遞參數(shù)、閉包的使用及鏈?zhǔn)交卣{(diào)相關(guān)操作技巧,需要的朋友可以參考下2017-03-03
詳解Puppeteer前端自動(dòng)化測(cè)試實(shí)踐
這篇文章主要介紹了詳解Puppeteer前端自動(dòng)化測(cè)試實(shí)踐,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
30分鐘用Node.js構(gòu)建一個(gè)API服務(wù)器的步驟詳解
這篇文章主要介紹了30分鐘用Node.js構(gòu)建一個(gè)API服務(wù)器的步驟詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05
npm?install常見(jiàn)報(bào)錯(cuò)以及問(wèn)題詳解
npm?install總是一言難盡,下面這篇文章主要給大家介紹了關(guān)于npm?install常見(jiàn)報(bào)錯(cuò)以及問(wèn)題的相關(guān)資料,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02
Node.js中利用js-xlsx處理xlsx文件的實(shí)現(xiàn)
js-xlsx庫(kù)是目前Github上star數(shù)量最多的處理Excel的庫(kù),本文介紹用 Node.js中的js-xls庫(kù)來(lái)處理Excel文件,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10
快速掌握Node.js中setTimeout和setInterval的使用方法
這篇文章主要為大家介紹了快速掌握Node.js中setTimeout和setInterval的使用方法,感興趣的小伙伴們可以參考一下2016-03-03
Nodejs進(jìn)階:express+session實(shí)現(xiàn)簡(jiǎn)易登錄身份認(rèn)證
本篇文章主要介紹了Nodejs進(jìn)階:express+session實(shí)現(xiàn)簡(jiǎn)易身份認(rèn)證示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-04-04
Node.js命令行/批處理中如何更改Linux用戶密碼淺析
這篇文章主要給大家介紹了關(guān)于Node.js命令行/批處理中如何更改Linux用戶密碼的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07

