首页 > 解决方案 > Node.js 连接到 mysql 数据库回调函数未执行

问题描述

我正在尝试将我的 node.js 应用程序连接到 mySQL 数据库,但似乎con.connect()con.query()没有执行的回调函数。这是我的代码的连接部分:

const mysql = require('mysql');
const con = mysql.createConnection({
           host: "localhost",
           user: "user",
           password: "pass",
           database: "db",

    });

app.get('/timetracking/dbTest', (req, res) => {
    var error1;
    var r;



    con.connect(function(err){
        s = 3;
        res.send(err);
    });

    var s = 1;

    con.query("SELECT * FROM Employee", function (err, result, fields) {
        error1 = err;
        res.send("yes");
        r = result;
        s = 2;
    });
    if (error1) res.send(error1 + "fail");
    else res.send(r + "ok" + s);
});

该应用程序正常启动,我可以在浏览器中查看该站点,但我得到的结果是“undefinedok1”。这意味着发送变量的值不会在回调函数中改变。安装了 mysql 模块。此外,如果我输入数据库用户的无效密码,我不会收到任何错误消息。我无法想象他们为什么不改变。

标签: mysqlnode.js

解决方案


回调代码与您的方法的其余部分异步运行。您需要在每个连续的回调中运行代码,或者使用 async/await 或 Promise。

使用现有代码进行最简单的调整(徒手,可能有语法错误):

app.get('/timetracking/dbTest', (req, res) => {
    var error1;
    var r;

    con.connect(function(err){
        s = 3;
        if (err) {
          return res.send(err);
        }

        var s = 1;

        con.query("SELECT * FROM Employee", function (err, result, fields) {
            error1 = err;

            r = result;
            s = 2;

            if (error1) res.send(error1 + "fail");
            else res.send(r + "ok" + s);
        });
    });
});

推荐阅读