node.js mysql结果变成一个variables
我一直在使用mountebank来做性能testing的一些瑕疵和一个很棒的工具。 function团队曾经问过它是否可以重新用于支持functiontesting,我曾说过我会看看。
我想要实现的是从MySQL数据库中select一个账号和账户余额,然后将余额返回给客户端(在这种情况下,一个Jmeter线束)
function (request, state, logger) { logger.info('GBG - getAccountBalance'); var mysql = require('mysql'); var result = ''; var con = mysql.createConnection({ host: "localhost", user: "user", password: "password", database: "customer" }); con.connect(function(err) { if (err) throw err; console.log("Connected!"); }); con.query('select * from accounts', function (err, rows, fields) { if (err) throw err; console.log(rows); console.log('accountNumber is : ', rows[0].accountNumber); result = rows[0].accountNumber; }); console.log('result is : ', result); var response = result; return { headers: { 'Content-Type': 'application/xml', 'Connection': 'Keep-Alive' }, body: response }; }
控制台日志的结果是:
result is : Connected! [ RowDataPacket { accountNumber: 777777, accountBalance: 777 } ] accountNumber is : 777777
不知道我在做什么错误,为什么结果是:线条出现,尽pipe是在代码后面。
任何意见赞赏。
充分披露,我已经使用mountebank大约两个星期,所以我是一个真正的初学者。
connect
和query
的function
关键字称为callback函数,只有在函数本身完成后才执行。 所以你的代码看起来像这样:
con.connect(function(err) { if (err) throw err; console.log("Connected!"); con.query('select * from accounts', function (err, rows, fields) { if (err) throw err; console.log(rows); console.log('accountNumber is : ', rows[0].accountNumber); result = rows[0].accountNumber; console.log('result is : ', result); var response = result; }); });
等等,但你只是介绍callback地狱你的代码。
asynchronous是你的朋友。
编辑:下面的例子:
async.waterfall([ function (callback) { //do some async function here con.connect(function(err) { if (err) throw err; console.log("Connected!"); //call this when you are done //you can even pass param to next function callback(null,true); }); },function (isConnected,callback1) { if !(isConnected){ console.log("Connection failed! Skipping Query...") callback1(null,"Error"); } //do another async function here: con.query('select * from accounts', function (err, rows, fields) { if (err) throw err; console.log(rows); console.log('accountNumber is : ', rows[0].accountNumber); result = rows[0].accountNumber; callback1(null,"Complete"); }); } ], function (err,result) { if(result == "Error"){ alert("Someting went wrong!"); } if(result == "Complete"){ alert("Done!"); } return 0; });
注意:我还没写JS一段时间。 从现有的一些代码中写下来,并没有经过testing。 此外,诺言也是有帮助的,但没有亲自看过。 BlueBird是一个图书馆。