node+express框架中連接使用mysql(經(jīng)驗總結(jié))
最近在學(xué)習(xí)node.js,做了一個練手項目,使用node.js+express框架,配合mysql數(shù)據(jù)庫和前端vue框架開發(fā)一個多人文檔編輯系統(tǒng)。
node.js環(huán)境下express+mysql的服務(wù)端項目示例
首先是環(huán)境搭建:
node環(huán)境下
$ npm install -g express-generator $ express -e project
進(jìn)入項目文件根目錄安裝依賴模塊
$ npm install $ DEBUG=node-blog:* npm start
看看項目目錄都有什么
看看生成的工程目錄里面都有什么,
bin:存放可執(zhí)行文件
node_modules:存放 package.json 中安裝的模塊,當(dāng)你在 package.json 添加依賴的模塊并安裝后,存放在這個文件夾下
public:存放 image、css、js 等前端資源文件
routes:存放路由文件
views:存放視圖文件或者說模版文件
app.js:啟動文件,或者說入口文件
package.json:存儲著工程的信息及模塊依賴,當(dāng)在 dependencies 中添加依賴的模塊時,運行npm install ,npm 會檢查當(dāng)前目錄下的 package.json,并自動安裝所有指定的模塊
下面開始安裝數(shù)據(jù)庫,這里我選擇的是mysql。
npm install mysql --save-dev
安裝完畢之后,開始配置數(shù)據(jù)庫。
//mysql配置文件 mysql = { host: "xx.xxx.xx.xxx", //這是數(shù)據(jù)庫的地址 user: "xxx", //需要用戶的名字 password: "xxx", //用戶密碼 ,如果你沒有密碼,直接雙引號就是 database: "xxx" //數(shù)據(jù)庫名字 } //好了,這樣我們就能連接數(shù)據(jù)庫了 module.exports = mysql; //用module.exports暴露出這個接口, mysql連接池配置: //mysql連接池配置文件 var mysql = require('mysql'); var $dbConfig = require('../config/mysql');//注意改成自己項目中mysql配置文件的路徑 // 使用連接池,避免開太多的線程,提升性能 var pool = mysql.createPool($dbConfig); /** * 對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ù)庫的過程比較靈活,我是使用模塊化的思想,將一張數(shù)據(jù)表封裝成一個模塊暴露出去,通過該模塊獲取這張表的增刪改查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]};` } }, }; //參數(shù)過濾 function filter(arguments, obj) { let newObj = {} arguments.forEach(every => { if (every in obj) { newObj[every] = obj[every] } }); return newObj; }; module.exports = qibu_task;
然后就可以在路由返回時進(jìn)行數(shù)據(jù)庫操作啦。具體代碼就不貼啦。路由可以識別get、post方法,修改和刪除通過傳遞參數(shù)模擬。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Nodejs關(guān)于gzip/deflate壓縮詳解
本文主要向大家介紹了nodejs中關(guān)于gzip/deflate壓縮的2種方法,分別是管道壓縮和非管道壓縮,十分詳細(xì),并附帶示例,這里推薦給大家參考下。2015-03-03從零學(xué)習(xí)node.js之簡易的網(wǎng)絡(luò)爬蟲(四)
簡單的爬蟲實現(xiàn)原理很簡單:發(fā)送http請求至目標(biāo)地址獲取HTML頁面數(shù)據(jù),然后從獲取來的頁面數(shù)據(jù)中提取需要的數(shù)據(jù)保存。下面這篇文章主要介紹了利用node.js實現(xiàn)簡易的網(wǎng)絡(luò)爬蟲的相關(guān)資料,需要的朋友可以參考下。2017-02-02Linux CentOS系統(tǒng)下安裝node.js與express的方法
這篇文章主要給大家介紹了在Linux CentOS系統(tǒng)下安裝node.js與express的方法,文中介紹的非常詳細(xì),相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-04-04Node.js靜態(tài)服務(wù)器的實現(xiàn)方法
這篇文章主要介紹了Node.js靜態(tài)服務(wù)器的實現(xiàn)方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2018-02-02Node.js事件循環(huán)(Event Loop)的使用
事件循環(huán)是其非阻塞I/O和高并發(fā)能力的核心機(jī)制,本文主要介紹了Node.js事件循環(huán)(Event Loop)的使用,具有一定的參考價值,感興趣的可以了解一下2024-05-05