sql >> データベース >  >> RDS >> Mysql

nodejs express/routesおよびmysql

    私はあなたがこれらの呼び出しの非ブロッキングの性質を考慮に入れていないと信じています。変数がfalseに設定されている場合、接続が呼び出され、コールバックが保留されてフォールスルーします。コールバックが完了する前に、すぐに応答をレンダリングします。

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

    なぜコンソールで正しい値を取得するのですか?最終的にコールバックが呼び出され、期待どおりに実行されるためです。 res.renderの後に呼び出されます

    これはあなたが望むコードである可能性が高いです:

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



    1. すべてのユーザーテーブルを削除するにはどうすればよいですか?

    2. 列(月)の金額を合計するためのmySQLクエリ

    3. psqlを介してSQLスクリプトを実行すると、PgAdminでは発生しない構文エラーが発生します

    4. MacにAzureDataStudioをインストールする方法