2016-12-30 3 views
1

私はNode.jsを使ってWebアプリケーションを構築して表現する方法を学んでいます。レイアウトに変数を送る

ここにいくつか質問があります。私はランディングページを作成しています。私のデータベース(mysql)から取得したすべての情報は1ページに表示されます。

私のデータベースから、自分のレイアウトに、翡翠で作られた値を送信しています。

そして、私はここでは具体的なデータ、例えば、取得するために複数の機能を作成:ユーザーは、ユーザーがレイアウトを変更し、レイアウトにいくつかの重要な値を送信するために存在している場合、私はチェックしてログインしようとすると

function getUser(username, userId, callback) { 
    connection.query('SELECT * FROM users WHERE user_id = ?', userId, function(err, result) { 
     if (err) 
      callback(err, null); 
     else 

     var callBackString = {}; 
     callBackString.value1 = result[0].user_email; 
     callBackString.value2 = result[0].user_name; 


     callback(null, callBackString); 

    }); 

} 

を:

router.post('/login', function(req, res) { 

    connection.query('SELECT user_id FROM users WHERE user_email = ? AND user_password = ?', [req.body.login, req.body.password], function(err, results) { 
      if (err) throw err; 

      if (results[0]) { 

       userId = results[0].user_id; 

       getUser("username", userId, function(err, data) { 
        if (err) { 
         console.log("ERROR : ", err); 
        } else { 

         res.render('logged_in', { 
          email: data.value1, 
          username: data.value2, 

         }); 

         res.end(); 

        } 

       }); 


      } else { 
       res.render('index', { 
        validation: "failed" 

       }); 

      } 

     }); 

    }); 

私だけ(のgetUser())ここでは一つの関数を呼び出している、と私は、この関数を呼び出すときに、レイアウトの変更、と私はいくつかの値を送信します。

しかし、今、私は私は、関数のgetUser()

を呼び出したときに、私がやったように、別のテーブルから情報を取得するには、)としてgetPosts(と呼ばれる新しい関数を作成し、あまりにもレイアウトにそれを送りたいです私はこのようなことをしようとしましたが、成功しませんでした。スコープの外にある変数を "未定義"にしています。

router.post('/login', function(req, res) { 

    connection.query('SELECT user_id FROM users WHERE user_email = ? AND user_password = ?', [req.body.login, req.body.password], function(err, results) { 
     if (err) throw err; 

     if (results[0]) { 

      userId = results[0].user_id; 

      getUser("username", userId, function(err, data) { 
       if (err) { 
        console.log("ERROR : ", err); 
       } else { 
        email = data.value1; 
        username = data.value2; 

       } 

      }); 

      getPosts("posts", 1, function(err, data) { 
       if (err) { 
        console.log("ERROR : ", err); 
       } else { 
        postName = data.value1; 
        postText = data.value2; 

       } 

      }); 

      res.render('logged_in', { 
       email: email, 
       username: username, 
       pstname: postName, 
       psttxt: postText 

      }); 

      res.end(); 

     } else { 
      res.render('index', { 
       validation: "failed" 

      }); 

     } 

    }); 

}); 

コードを変更するにはどうすればよいですか?ありがとうございました。

答えて

1

それが動作する可能性があり怒鳴るよう、あなたのコードを変更する場合は、そうnode.jsasynchronizationをお読みください:

router.post('/login', function(req, res) { 
 

 
    connection.query('SELECT user_id FROM users WHERE user_email = ? AND user_password = ?', [req.body.login, req.body.password], function(err, results) { 
 
     if (err) throw err; 
 

 
     if (results[0]) { 
 

 
      userId = results[0].user_id; 
 

 
      getUser("username", userId, function(err, data) { 
 
       if (err) { 
 
        console.log("ERROR : ", err); 
 
       } else { 
 
        email = data.value1; 
 
        username = data.value2; 
 
        
 
        getPosts("posts", 1, function(err, data) { 
 
         if (err) { 
 
          console.log("ERROR : ", err); 
 
         } else { 
 
          postName = data.value1; 
 
          postText = data.value2; 
 

 
         res.render('logged_in', { 
 
          email: email, 
 
          username: username, 
 
          pstname: postName, 
 
          psttxt: postText 
 
         } 
 
        }); 
 

 
       } 
 

 
      }); 
 

 

 
     } else { 
 
      res.render('index', { 
 
       validation: "failed" 
 

 
      }); 
 

 
     } 
 

 
    }); 
 

 
});

関連する問題