从数据库获取简单的信息到一个node.js http服务器响应

我正试图从数据库获取一个简单的信息到一个node.js http服务器响应。 在下面的代码片段中,我可以看到系统日志中的数据库结果,但不能在http响应中看到。

你能给我一些想法,为什么发生这种情况?

谢谢。

var sys = require( 'sys' ) , http = require( 'http' ) , dbParams = { user : 'test' , pass : 'test' , db : 'just_test' } ; function dbConnect() { var Client = require( 'mysql' ).Client , client = new Client() ; client.user = dbParams.user; client.password = dbParams.pass; client.connect(); client.query('USE ' + dbParams.db); return( client ); } var dbClient = dbConnect(); http.createServer( function( httpRequest, httpResponse ) { httpResponse.writeHead( 200, { 'Content-Type' : 'text/plain' } ); httpResponse.write( '=== START httpResponse' + "\n" ); dbClient.query( 'SELECT * FROM base_events', function (err, dbRes, fields) { if (err) { throw err; } httpResponse.write( 'Obtained: ' + JSON.stringify( dbRes ) ); sys.log( 'FROM DB: ' + JSON.stringify( dbRes ) ); } ); httpResponse.write( '=== Test' + "\n" ); httpResponse.end(); dbClient.end(); } ).listen( 8000 ); sys.puts( 'Server running at http://127.0.0.1:8000' ); 

client.query的asynchronouscallback在你结束了httpResponse之后被调用。 尝试移动callback中的最后几个语句 – 例如:

 http.createServer( function( httpRequest, httpResponse ) { httpResponse.writeHead( 200, { 'Content-Type' : 'text/plain' } ); httpResponse.write( '=== START httpResponse' + "\n" ); dbClient.query( 'SELECT * FROM base_events', function (err, dbRes, fields) { if (err) { throw err; } httpResponse.write( 'Obtained: ' + JSON.stringify( dbRes ) ); sys.log( 'FROM DB: ' + JSON.stringify( dbRes ) ); httpResponse.write( '=== Test' + "\n" ); httpResponse.end(); dbClient.end(); } ); 

}).listen(8000);