数据连接完成,剩下的就是前台的请求以及服务端接到请求后,对数据库的查询和结果数据的返回操作了。
引入相关模块内容:
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}); }); });
至此,前台到后台的一次请求终于成功走通!/鼓掌~