Używam modułu reszta node.js. Mam interfejs REST API, który wyprowadza wynik pojedynczego zapytania MySQL w json. Oto kod interfejsu API;Połącz dane wyjściowe z 2 zapytań w interfejsie API REST
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);
};
Załóżmy, że mam inne zapytanie, które wygląda mniej więcej tak;
var query_str_2 =
"SELECT knobs.mac_addr, " +
"furniture.furniture_type " +
"FROM furnitures" +
"WHERE (knobs.mac_addr = ?) "
;
Chcę połączyć wyjście 2 MySQL odpytuje query_str
i query_str_2
i mieć API REST zwraca wynik w json. Jak to zrobić?
Aby być bardziej zrozumiałym, myślę o kodzie robiącym coś takiego;
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: zacząłem bounty przyciągnąć odpowiedzi, które korzystają z obietnic.
Pytasz, jak wykonać dwa zapytania lub czy naprawdę zadajesz pytanie SQL dotyczące wykonywania złączeń? – HeadCode
Kod nagłówka, Przepraszamy, że nie jest jasne. To nie jest pytanie SQL. Pytam, jak zrobić 2 kwerendy i zwracając połączony wynik z 2 kwerend w json. Zmieniłem to pytanie, aby było jaśniejsze. Dziękuję Ci. –
Trudną częścią tego problemu jest asynchroniczny charakter node.js. Zapytania nie mogą być uruchamiane jedna po drugiej. Ciekawie będzie zobaczyć, w jaki sposób obietnice lub moduły, takie jak bluebird, są wykorzystywane do udzielenia odpowiedzi na to pytanie. – user781486