javascript - node.js用express连接MySQL出现了bug
PHP中文网
PHP中文网 2017-04-10 17:04:47
[JavaScript讨论组]

初学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后,显示的是

同时,xshell里面看到的日志是这样的:

说明数据库连接是成功的?!
可是按理说查询成功的话会执行回调函数也就是说isok会变成'ok'啊。。。
求好心人解答,谢谢。。

PHP中文网
PHP中文网

认证0级讲师

全部回复(3)
天蓬老师

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

阿神

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

大家讲道理

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号