Mysql
 sql >> Datenbank >  >> RDS >> Mysql

nodejs express/routes und mysql

Ich glaube, Sie berücksichtigen nicht die nicht blockierende Natur dieser Anrufe. Die Variable wird auf "false" gesetzt, die Verbindung wird aufgerufen und fällt dann bis zum Rückruf durch. Sie geben die Antwort sofort aus, bevor der Rückruf abgeschlossen ist.

module.exports = function(app){
    app.get('/register/check/u/:username', function(req, res){
        // you set the value of the output var
        var output = 'false';
        // this is a non-blocking call to getConnection which fires the callback you pass into it, once the connection happens.  The code continues on - it doesn't wait.
        pool.getConnection(function(err, conn) {
            query = conn.query('SELECT * FROM users WHERE username LIKE ?', [req.params.username]);
            query.on('error', function(err){
                throw err;
            });
            query.on('result', function(row){
                var output = 'true';
                console.log(row.email);
                console.log(output);
            });
           conn.release();
        });

        // you are getting here before the callback is called
        res.render('register/check_username', { output: output});
    });
);

Warum erhalten Sie den richtigen Wert in der Konsole? Denn schließlich wird der Callback aufgerufen und führt das aus, was Sie erwarten. Es wird einfach nach res.render

aufgerufen

Dies ist wahrscheinlich der gewünschte Code:

module.exports = function(app){
    app.get('/register/check/u/:username', function(req, res){
        pool.getConnection(function(err, conn) {
            query = conn.query('SELECT * FROM users WHERE username LIKE ?', [req.params.username]);
            query.on('error', function(err){
                throw err;
            });
            query.on('result', function(row){
                var output = 'true';
                console.log(row.email);
                console.log(output);
                res.render('register/check_username', { output: output});
            });
           conn.release();
        });
    });
);