nodejs查sql資料並返回流程
阿新 • • 發佈:2018-11-01
資料連線完成,剩下的就是前臺的請求以及服務端接到請求後,對資料庫的查詢和結果資料的返回操作了。
引入相關模組內容:
const app = require('../root-router/appRouter'); const mysqlConnection = require('../mysql/mysqlConnection'); const tableName = require('../mysql/tableName');
一個是路由主模組,一個是mysql服務模組,還有一個是表名常量模組。
// get方法獲取所有賬號資訊列表 app.get("/gg_account/list", function(req, res) { console.log("請求url:", req.path, "請求引數:", req.query); // 查詢相應資料表,返回資料 const data = mysqlConnection.selectData(tableName.GG_ACCOUNT_INFO); res.send({code: 200, message: "get gg_account list success", data: data}); });
這時就可以呼叫mysql服務模組進行相應表的查詢了,本以為應該查到之後返回資料然後向前端返回資料的,結果是我想多了,底層直接報錯,然後就一步一步打斷點,發現query語句查出來返回的結果居然是空陣列:
/** * 查詢語句 * @param { string } tableName 表名 */ function selectData(tableName) { const sql = 'select * from ' + tableName; const list = []; connection.query(sql, (err, rows, fields) => { if (err) { console.log('[query] - :' + err); return; } list= rows; console.log('The solution is: ', rows); }); return list; }
node主要使用的stream(流),這樣當然抓不到資料了。後來找了半天,發現方向是錯的,應該在查到之後直接丟擲,於是修改了下查詢方法:
/** * 查詢語句 * @param { string } tableName 表名 * @param { Function } sucCallback 成功的回撥方法 * @param { Function } errCallback 失敗的回撥方法 */ function selectData(tableName, sucCallback, errCallback) { const sql = 'select * from ' + tableName; connection.query(sql, (error, results, fields)=> { if (error) { errCallback(error); return; } sucCallback(results); }); }
然後調用出也修改了一下:
// get方法獲取所有賬號資訊列表 app.get("/gg_account/list", function (req, res) { console.log("請求url:", req.path, "請求引數:", req.query); // 查詢相應資料表,返回資料 mysqlConnection.selectData(tableName.GG_ACCOUNT_INFO, (suc) => { res.send({code: 200, message: "Success!", data: suc, total: suc.length}); }, (err) => { res.send({code: 500, message: "Error!", data: err}); }); });
至此,前臺到後臺的一次請求終於成功走通!/鼓掌~