node+express框架中連接使用mysql(經(jīng)驗(yàn)總結(jié))
最近在學(xué)習(xí)node.js,做了一個(gè)練手項(xiàng)目,使用node.js+express框架,配合mysql數(shù)據(jù)庫(kù)和前端vue框架開(kāi)發(fā)一個(gè)多人文檔編輯系統(tǒng)。
node.js環(huán)境下express+mysql的服務(wù)端項(xiàng)目示例
首先是環(huán)境搭建:
node環(huán)境下
$ npm install -g express-generator $ express -e project
進(jìn)入項(xiàng)目文件根目錄安裝依賴(lài)模塊
$ npm install $ DEBUG=node-blog:* npm start
看看項(xiàng)目目錄都有什么

看看生成的工程目錄里面都有什么,
bin:存放可執(zhí)行文件
node_modules:存放 package.json 中安裝的模塊,當(dāng)你在 package.json 添加依賴(lài)的模塊并安裝后,存放在這個(gè)文件夾下
public:存放 image、css、js 等前端資源文件
routes:存放路由文件
views:存放視圖文件或者說(shuō)模版文件
app.js:?jiǎn)?dòng)文件,或者說(shuō)入口文件
package.json:存儲(chǔ)著工程的信息及模塊依賴(lài),當(dāng)在 dependencies 中添加依賴(lài)的模塊時(shí),運(yùn)行npm install ,npm 會(huì)檢查當(dāng)前目錄下的 package.json,并自動(dòng)安裝所有指定的模塊
下面開(kāi)始安裝數(shù)據(jù)庫(kù),這里我選擇的是mysql。
npm install mysql --save-dev
安裝完畢之后,開(kāi)始配置數(shù)據(jù)庫(kù)。
//mysql配置文件
mysql = {
host: "xx.xxx.xx.xxx", //這是數(shù)據(jù)庫(kù)的地址
user: "xxx", //需要用戶(hù)的名字
password: "xxx", //用戶(hù)密碼 ,如果你沒(méi)有密碼,直接雙引號(hào)就是
database: "xxx" //數(shù)據(jù)庫(kù)名字
} //好了,這樣我們就能連接數(shù)據(jù)庫(kù)了
module.exports = mysql; //用module.exports暴露出這個(gè)接口,
mysql連接池配置:
//mysql連接池配置文件
var mysql = require('mysql');
var $dbConfig = require('../config/mysql');//注意改成自己項(xiàng)目中mysql配置文件的路徑
// 使用連接池,避免開(kāi)太多的線(xiàn)程,提升性能
var pool = mysql.createPool($dbConfig);
/**
* 對(duì)query執(zhí)行的結(jié)果自定義返回JSON結(jié)果
*/
function responseDoReturn(res, result, resultJSON) {
if (typeof result === 'undefined') {
res.json({
code: '201',
msg: 'failed to do'
});
} else {
res.json(result);
}
};
/**
* 封裝query之sql帶不占位符func
*/
function query(sql, callback) {
pool.getConnection(function(err, connection) {
connection.query(sql, function(err, rows) {
callback(err, rows);
//釋放鏈接
connection.release();
});
});
}
/**
* 封裝query之sql帶占位符func
*/
function queryArgs(sql, args, callback) {
pool.getConnection(function(err, connection) {
connection.query(sql, args, function(err, rows) {
callback(err, rows);
//釋放鏈接
connection.release();
});
});
}
//exports
module.exports = {
query: query,
queryArgs: queryArgs,
doReturn: responseDoReturn
}
操作數(shù)據(jù)庫(kù)的過(guò)程比較靈活,我是使用模塊化的思想,將一張數(shù)據(jù)表封裝成一個(gè)模塊暴露出去,通過(guò)該模塊獲取這張表的增刪改查SQL語(yǔ)句。下面貼上示例代碼:
let express = require('express');
let mysql = require('../common/basicConnection');
let qibu_task = {
index: '',
value: '',
list: `SELECT * from qibu_task;`, //列表查詢(xún)
insert(args) {
qibu_task.index = '';
qibu_task.value = '';
args = filter(['id', 'task', 'name', 'created_at'], args)
for (let key in args) {
qibu_task.index = `${qibu_task.index}${key},`
let re = /^[0-9]+.?[0-9]*/;
if (re.test(args[key])) {
qibu_task.value = `${qibu_task.value}${args[key]},`
} else {
qibu_task.value = `${qibu_task.value}'${args[key]}',`
}
}
qibu_task.index = qibu_task.index.substr(0, qibu_task.index.length - 1);
qibu_task.value = qibu_task.value.substr(0, qibu_task.value.length - 1);
return `INSERT INTO qibu_task (${qibu_task.index}) VALUES(${qibu_task.value})`;
}, //按需增加
select(index, value) {
return `SELECT * from qibu_task where ${index}=${value};` //按需查詢(xún)
},
delete(index, value) {
return `DELETE from qibu_task where ${index}=${value};` //按需刪除
},
update(index, args) { //提交修改
if (index in args) {
qibu_task.value = '';
args = filter(['id', 'task', 'name', 'created_at'], args)
for (let key in args) {
let re = /^[0-9]+.?[0-9]*/;
if (re.test(args[key])) {
qibu_task.value = `${qibu_task.value}${key}=${args[key]},`
} else {
qibu_task.value = `${qibu_task.value}${key}='${args[key]}',`
}
}
qibu_task.value = qibu_task.value.substr(0, qibu_task.value.length - 1)
return `UPDATE qibu_task SET ${qibu_task.value} WHERE ${index}=${args[index]};`
}
},
};
//參數(shù)過(guò)濾
function filter(arguments, obj) {
let newObj = {}
arguments.forEach(every => {
if (every in obj) {
newObj[every] = obj[every]
}
});
return newObj;
};
module.exports = qibu_task;
然后就可以在路由返回時(shí)進(jìn)行數(shù)據(jù)庫(kù)操作啦。具體代碼就不貼啦。路由可以識(shí)別get、post方法,修改和刪除通過(guò)傳遞參數(shù)模擬。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Vue項(xiàng)目通過(guò)node連接MySQL數(shù)據(jù)庫(kù)并實(shí)現(xiàn)增刪改查操作的過(guò)程詳解
- node連接mysql查詢(xún)事務(wù)處理的實(shí)現(xiàn)
- Node-Red實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)連接的方法
- nodejs連接mysql數(shù)據(jù)庫(kù)及基本知識(shí)點(diǎn)詳解
- Node.js使用MySQL連接池的方法實(shí)例
- nodejs實(shí)現(xiàn)的連接MySQL數(shù)據(jù)庫(kù)功能示例
- node 多種方法連接mysql數(shù)據(jù)庫(kù)(最新推薦)
相關(guān)文章
Nodejs關(guān)于gzip/deflate壓縮詳解
本文主要向大家介紹了nodejs中關(guān)于gzip/deflate壓縮的2種方法,分別是管道壓縮和非管道壓縮,十分詳細(xì),并附帶示例,這里推薦給大家參考下。2015-03-03
從零學(xué)習(xí)node.js之簡(jiǎn)易的網(wǎng)絡(luò)爬蟲(chóng)(四)
簡(jiǎn)單的爬蟲(chóng)實(shí)現(xiàn)原理很簡(jiǎn)單:發(fā)送http請(qǐng)求至目標(biāo)地址獲取HTML頁(yè)面數(shù)據(jù),然后從獲取來(lái)的頁(yè)面數(shù)據(jù)中提取需要的數(shù)據(jù)保存。下面這篇文章主要介紹了利用node.js實(shí)現(xiàn)簡(jiǎn)易的網(wǎng)絡(luò)爬蟲(chóng)的相關(guān)資料,需要的朋友可以參考下。2017-02-02
Linux CentOS系統(tǒng)下安裝node.js與express的方法
這篇文章主要給大家介紹了在Linux CentOS系統(tǒng)下安裝node.js與express的方法,文中介紹的非常詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-04-04
Node.js靜態(tài)服務(wù)器的實(shí)現(xiàn)方法
這篇文章主要介紹了Node.js靜態(tài)服務(wù)器的實(shí)現(xiàn)方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-02-02
Node.js事件循環(huán)(Event Loop)的使用
事件循環(huán)是其非阻塞I/O和高并發(fā)能力的核心機(jī)制,本文主要介紹了Node.js事件循環(huán)(Event Loop)的使用,具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05
Node.js和Express簡(jiǎn)單入門(mén)介紹
本篇文章主要介紹了Node.js和Express簡(jiǎn)單入門(mén)介紹,詳細(xì)介紹如何用Node.js和Express搭建一個(gè)web服務(wù)器,有興趣的可以了解一下。2017-03-03

