node.js用express连接MySQL出现了bug

初学node,用express写了一个测试脚本想连接数据库查询数据。代码如下:

var express = require('express');
var app = express();


app.get('/hello', function (req, res) {
    var mysql      = require('mysql');
    var connection = mysql.createConnection({
        host     : '121.42.209.162',
        user     : 'root',
        password : '这里是密码',
        database : 'hgb'
    });

    var obj;
    var isok='failed';
    connection.connect(function(err) {
        if (err) {
            console.error('error connecting: ' + err.stack);
            return;
        }
        console.log('connected as id ' + connection.threadId);
    });

    connection.query('SELECT * FROM `538`', function(err, rows) {
        if(err){
            console.log(err.code); // 'ECONNREFUSED'
            console.log(err.fatal); // true
        }
        isok='ok';
    });

    connection.end();

    res.send(isok);
});

var server = app.listen(3000, function () {
    var host = server.address().address;
    var port = server.address().port;

    console.log('Example app listening at http://%s:%s', host, port);
});

但是浏览器打开http://localhost:3000/hello后,显示的是
clipboard.png
同时,xshell里面看到的日志是这样的:
clipboard.png
说明数据库连接是成功的?!
可是按理说查询成功的话会执行回调函数也就是说isok会变成'ok'啊。。。
求好心人解答,谢谢。。

阅读 4.8k
3 个回答

程序是异步执行的,query还没执行完就send了

node是异步的啊,你的isok='ok';还没执行就执行了后面的res.send(isok);
你可以把输出放到else里面

res.send和connection.query是异步执行的,你把res.send放到query的回调函数里面就行了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题