Mysql
 sql >> Base de données >  >> RDS >> Mysql

nodejs express/routes et mysql

Je crois que vous ne tenez pas compte de la nature non bloquante de ces appels. La variable est définie sur false la connexion est appelée puis tombe en attente d'un rappel. Vous rendez immédiatement la réponse, avant la fin du rappel.

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});
    });
);

Pourquoi obtenez-vous la bonne valeur dans la console ? Parce que finalement le rappel est appelé et exécute ce que vous attendez. Il est juste appelé après le res.render

C'est probablement le code que vous voulez :

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();
        });
    });
);