问题描述
严格来说这个跟node没什么关系,是我不够了解回调函数。我想接受到get请求后引用一方法,在数据库中获得值后返回回来再send出去。以前一直用的都是赋给一个全局变量,但这个肯定不是最好的办法啦
function select(id) { var result = null; var mysql = require(’mysql’); var connection = mysql.createConnection({ host : ’localhost’, user : ’root’, password : ’root’ }); connection.connect(); connection.query('use mldn'); connection.query( ’SELECT * FROM emp WHERE empno = ’ + id, function (err, results, fields) { if (err) { throw err; } connection.end(); return results; } ); //下面是没用的 //return results;}router.get(’/user’,function(req,res) { //我想在这里获得数据再传出去,但这样是失败的 res.send(select(req.query.userid)); res.end()})
问题解答
回答1:用Promise 封装一下。
query(sql, ...args) { let promise = new Promise((resolve, reject) => {if (!sql) { reject({ err: ’sql must be not empty !’ });}this.mysql_connection.query(sql, args, (err, rows, fields) => { if (err) {reject(err); } else {resolve(rows); }}) }); return promise;}query(sql,args).then((data)=>{ res.send(data); res.end()}).catch((err)=>{});
大致伪代码就类似这样的。