node.js restifyモジュールを使用しています。私はjsonで単一のMySQLクエリの結果を出力するREST APIを持っています。 APIのコードは次のとおりです。REST APIで2つのクエリの出力を結合します
var rest_api_get_list = function (app, url_name) {
function respond(req, res, next) {
var door_mac = req.query.door_mac;
var connection = own_mysql.getMySQL_connection();
var query_str =
"SELECT doors.mac_addr, " +
"sensors.sensor_type " +
"FROM sensors " +
"WHERE (doors.mac_addr = ?) "
;
var query_var = [door_mac];
var query = connection.query(query_str, query_var, function (err, rows, fields) {
//if (err) throw err;
if (err) {
//throw err;
console.log(err);
logger.info(err);
}
else {
res.send(rows);
}
});
return next();
}
app.get(url_name, respond);
};
次のような別のクエリがあるとします。
var query_str_2 =
"SELECT knobs.mac_addr, " +
"furniture.furniture_type " +
"FROM furnitures" +
"WHERE (knobs.mac_addr = ?) "
;
私は2 MySQLはquery_str
とquery_str_2
を照会の出力を組み合わせて、REST APIがJSONで結果を返すようにしたいです。これはどうすればできますか?
もっと明確にするために、私はこのようなことをするコードを考えています。
var rest_api_get_list = function (app, url_name) {
function respond(req, res, next) {
var door_mac = req.query.door_mac;
var connection = own_mysql.getMySQL_connection();
var query_str =
"SELECT doors.mac_addr, " +
"sensors.sensor_type " +
"FROM sensors " +
"WHERE (doors.mac_addr = ?) "
;
var query_var = [door_mac];
var query = connection.query(query_str, query_var, function (err, rows_output_1, fields) {
//if (err) throw err;
});
var query_str_2 =
"SELECT knobs.mac_addr, " +
"furniture.furniture_type " +
"FROM furnitures" +
"WHERE (knobs.mac_addr = ?) "
;
var query_2 = connection.query(query_str_2, query_var, function (err, rows_output_2, fields) {
//if (err) throw err;
});
//How to display json output of rows_output_1 and rows_output_2?
return next();
}
app.get(url_name, respond);
};
EDIT:私はPromisesを使用する回答を引き付けるために賞金を始めました。
あなたは2つのクエリを実行する方法を尋ねていますか、またはSQLの質問に実際に結合を行う方法について質問していますか? – HeadCode
ヘッドコード、申し訳ありませんが明確ではありません。これはSQLの質問ではありません。 2つのクエリを実行し、2つのクエリの結合結果をjsonで返す方法を尋ねています。私はそれをより明確にするために質問を編集しました。ありがとうございました。 –
この問題の難しい部分は、node.jsの非同期性です。問合せは順番に実行できません。この質問に答えるために、ブルーバードのような約束やモジュールがどのように使われているのか興味深いでしょう。 – user781486