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大约两个星期,所以我是一个真正的初学者。

connectqueryfunction关键字称为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是一个图书馆。

Interesting Posts