私はノードの世界ではかなり新しく、PHPアプリケーションをノードに移行しようとしています。すべての記事データを返すには、最初のクエリの結果に応じていくつかの異なるクエリを実行する必要があります。現在、私のデータオブジェクトは2つのクエリが実行される前に返されるので空です。約束されたベースのアプローチを使用してこれらのクエリを「チェーン化」する方法を教えてください。ノード+ Mysql:別のクエリに基づいてより多くのクエリを実行するには
ライブラリhttps://github.com/lukeb-uk/node-promise-mysqlが見つかりましたが、私のコードでどのように実装するのか分かりません。
exports.getArticleData = function(req, done) {
pool.getConnection(function(error, connection) {
if (error) throw error;
var data = {
article: {},
listicles: []
};
// Inital query
connection.query(
`SELECT article_id, title, is_listicle_article, FROM com_magazine_articles AS article WHERE article_id = ${req
.params.articleId}`,
function(error, results) {
data.article = results;
}
);
// This query should only be excuted if is_listicle_article = true
if (data.article.is_listicle_article) {
connection.query(
`SELECT * FROM com_magazine_article_listicles WHERE article_id = ${req.params
.articleId}`,
function(error, results) {
data.listicle = results;
}
);
}
// More queries depending on the result of the first one
// ....
// ....
// Callback with the data object
done(data);
connection.release();
});
};
他のクエリ結果に基づいてクエリを実行する最良の方法は何でしょうか?どんな助けでも本当に感謝しています。
こんにちはデレク、迅速な返信をありがとうございます。私はすぐにあなたのソリューションを実装しようとし、それが働いた場合にお知らせします。私はhttps://github.com/mysqljs/mysqlの構文をコピーし、connection.query内で関数を使用しました。最初のクエリの値が必要なので、これらのクエリを組み合わせる方法があるかどうかはわかりません。残りのクエリは自分のコードと似ていますが、最初のクエリの結果に応じてこれらのクエリのうちの1つだけが実行されます。たとえば、article typeがlisticle query 2である場合、記事がスポンサーのstory query 3の場合に実行されます。 – Menelik
@Menelik 1)後のクエリが最初のクエリのデータに依存する場合、変数の格納はひどい考えではありません。 2)このように条件付きクエリを簡単に実行することもできます。 –
あなたのコードで遊んだだけで、次のようなエラーが表示されます。 : 'TypeError:connection.query(...)。それでは関数ではありません.'これを動作させるには、特定の約束ライブラリをインポートする必要がありますか? – Menelik