ノードの実験を始めたばかりです(Expressを使用して、MySqlデータベースを備えた単純なWebサイトを構築しています)。
私は基本的に、Express が提供するアプリケーション構造で実行しました (これは、この質問には関係ありません)。ホームページへのリクエストが行われるたびにヒットする関数routes/index.js
をエクスポートするファイルがあります。index
の内容は次のindex.js
とおりです。
var db = require('../db');
exports.index = function(req, res){
db.getConnection(function(err, connection) {
connection.query('SELECT * FROM test_table', function (err, rows) {
var templateVariables = {
title: 'Index Page',
response: rows[0].text
};
res.render('index', templateVariables);
});
connection.end();
});
};
これは明らかに非常に予備的で軽量な例GET
ですが、インデックス ページに対するこの特定の要求には、すでに 3 つの深さのコールバック関数のセットがあります。各コールバックは、結果に依存するため、「親」のコールバック内に存在する必要があります (順次実行される言語/環境では、これは明白で些細なことです)。
私の質問は、より複雑で潜在的に非常に大規模なアプリケーションを構築する場合、コールバック関数の大量のネストの問題をどのように回避するかということです。これはもちろん、ロジックに順次依存している場合に当てはまります。Node の哲学が非同期であることは知っていますが、データベースからのデータを待機することになると、5 つの個別のクエリを実行しているとしたらどうでしょうか。単一の複数ステートメントのクエリをアトミック ユニットとして記述しますか? この質問はデータベースに限定されませんが。