node+express框架中連線使用mysql經驗總結
最近在學習node.js,做了一個練手專案,使用node.js+express框架,配合mysql資料庫和前端vue框架開發一個多人文件編輯系統。
ofollow,noindex">node.js環境下express+mysql的服務端專案示例
首先是環境搭建:
node環境下
$ npm install -g express-generator $ express -e project 複製程式碼
進入專案檔案根目錄安裝依賴模組
$ npm install $ DEBUG=node-blog:* npm start 複製程式碼
看看專案目錄都有什麼

看看生成的工程目錄裡面都有什麼,
bin:存放可執行檔案
node_modules:存放 package.json 中安裝的模組,當你在 package.json 新增依賴的模組並安裝後,存放在這個資料夾下
public:存放 image、css、js 等前端資原始檔
routes:存放路由檔案
views:存放檢視檔案或者說模版檔案
app.js:啟動檔案,或者說入口檔案
package.json:儲存著工程的資訊及模組依賴,當在 dependencies 中新增依賴的模組時,執行npm install ,npm 會檢查當前目錄下的 package.json,並自動安裝所有指定的模組
下面開始安裝資料庫,這裡我選擇的是mysql。
npm install mysql --save-dev 複製程式碼
安裝完畢之後,開始配置資料庫。
//mysql配置檔案 mysql = { host: "xx.xxx.xx.xxx", //這是資料庫的地址 user: "xxx", //需要使用者的名字 password: "xxx", //使用者密碼 ,如果你沒有密碼,直接雙引號就是 database: "xxx" //資料庫名字 } //好了,這樣我們就能連線資料庫了 module.exports = mysql; //用module.exports暴露出這個介面, 複製程式碼
mysql連線池配置:
//mysql連線池配置檔案 var mysql = require('mysql'); var $dbConfig = require('../config/mysql');//注意改成自己專案中mysql配置檔案的路徑 // 使用連線池,避免開太多的執行緒,提升效能 var pool = mysql.createPool($dbConfig); /** * 對query執行的結果自定義返回JSON結果 */ 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 } 複製程式碼
操作資料庫的過程比較靈活,我是使用模組化的思想,將一張資料表封裝成一個模組暴露出去,通過該模組獲取這張表的增刪改查SQL語句。下面貼上示例程式碼:
let express = require('express'); let mysql = require('../common/basicConnection'); let qibu_task = { index: '', value: '', list: `SELECT * from qibu_task;`, //列表查詢 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};` //按需查詢 }, 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]};` } }, }; //引數過濾 function filter(arguments, obj) { let newObj = {} arguments.forEach(every => { if (every in obj) { newObj[every] = obj[every] } }); return newObj; }; module.exports = qibu_task; 複製程式碼
然後就可以在路由返回時進行資料庫操作啦。具體程式碼就不貼啦。路由可以識別get、post方法,修改和刪除通過傳遞引數模擬。
到這裡整個服務端配置就差不多了。除此之外,專案還有socket.io的使用,就另外再說吧。下面貼上github地址,觀眾老爺們走過路過賞個start唄^.^