4

I am having some trouble figuring out variables "passing" (I know it's not the right term, I'll explain), given the asynchronous nature of node.js.

Please have a look at the following:

connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
  if(err) {
    throw err;
  }
  var solution = rows[0].solution;
});

res.render('index', { title: solution });

As you can imagine, I am getting a reference error, solution is not defined. This is because the res.render is done before getting the solution from the mysql server.

How can I make it render the page once the solution is defined? I know it's something really little and stupid and is really at the very core of node, but please help me understand.

4

1 に答える 1

6

connection.queryの2番目のパラメーターは、データベースが戻った後に実行されるコールバックです。コールバック内にres.render行を入れてみませんか?そうすれば、データの準備が整うまでレンダリング関数は呼び出されません。

connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
  if(err) throw err;
  var solution = rows[0].solution;
  res.render('index', { title: solution });
});

Nodeを初めて使用する場合、コールバックは少し注意が必要です。発生する必要があり、非同期であるステップを考える必要があります。そこから、コールバックがプロセスの続行を許可していることを確認する必要があります。

于 2012-09-10T17:09:39.903 に答える