기본적으로 json 개체에 대한 데이터를 얻으려면 약 3 호출을해야합니다. 그것은 기본적으로 JSON 개체의 일부 속성을 가진 JSON 배열 중 하나는 두 번째 쿼리를 사용하여 다른 값 배열을 선택하면 그 안에 또 다른 db 호출로 선택된 배열이 있습니다. 노드 js에서 DB 호출의 다양한 문자열을 가장 좋은 방법
나는 .. 나는 아래 전화로 파고와 함께 나는 하나 개의 루트 JSON 객체에 대해 수집 된 모든 정보를 넣어하지만 예기치 않은 동작이 많이 생성의 수 있도록 asyn.concatSeries를 사용하여 JSON의예 시도
[
{
"item" : "firstDbCall"
"children" : [ {
"name" : "itemDiscoveredWithSecondDBCall"
"children" : [ itemsDiscoveredwith3rdDBCall]
},
]
}
]
이것은 node.js.를 사용하면 실제로 어렵습니다. 나는 이것을 다른 목적을 위해 많은 것을해야하기 때문에 이것을 올바르게하는 법을 정말로 알아야합니다.
수정 이것은 코드입니다. async.concatSeries에는 이상한 동작이 있습니다. 결과는 각 배열에 대해 함수가 완료된 후에 여러 번 호출됩니다. 그래서 나는 수표를 제자리에 두어야했습니다. 나는 그것이 매우 지저분한 코드를 알고 있지만 난 그냥 넣어 봤는데 반창고
console.log("GET USERS HAREDQARE INFO _--__--_-_-_-_-_____");
var query = "select driveGroupId from tasks, driveInformation where agentId = '"
+ req.params.agentId + "' and driveInformation.taskId = tasks.id order by driveInformation.taskId desc;";
connection.query(query, function(err, rows) {
if (rows === undefined) {
res.json([]);
return;
}
if(rows.length<1) { res.send("[]"); return;}
var driveGroupId = rows[0].driveGroupId;
var physicalQuery = "select * from drives where driveGroupId = " + driveGroupId + ";";
connection.query(physicalQuery, function(err, rows) {
console.log("ROWSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS");
console.log(rows);
async.concatSeries(rows, function(row, cb) {
console.log("-------------------------------SINGLE ROW-------------------------------------");
console.log(row);
if(row.hasLogicalDrives != 0) {
console.log("HAS LOGICAL DRIVES");
console.log(row.id);
var query = "select id, name from logicalDrives where driveId = " + row.id;
connection.query(query, function(error, drives) {
console.log("QUERY RETURNED");
console.log(drives);
parseDriveInfo(row.name, row.searchable, drives, cb);
});
}
else
var driveInfo = { "driveName" : row.name, "searchable" : row.searchable};
console.log("NO SUB ITEMS");
cb(null, driveInfo);
}, function(err, results) {
console.log("GEETTTTINGHERE");
console.log(results);
if(results.length == rows.length) {
console.log("RESULTS FOR THE DRIVE SEARCH");
console.log(results);
var response = {"id": req.params.agentId};
response.driveList = results;
console.log("RESPONSE");
console.log(response);
res.json(response);
}
});
});
});
};
parseDriveInfo = function(driveName, searchable, drives, cb) {
async.concatSeries(drives, function(drive,callback) {
console.log("SERIES 2");
console.log(drive);
console.log("END OF DRIVE INFO");
var query = "select name from supportedSearchTypes where logicalDriveId = " + drive.id;
connection.query(query, function(error, searchTypes) {
drive.searchTypes = searchTypes;
var driveInfo = { "driveName" :driveName,
"searchable" : searchable,
"logicalDrives" : drive
};
callback(null, driveInfo);
});
}, function (err, results) {
console.log("THIS IS ISISIS ISISISSISISISISISISISISISIS");
console.log(results);
if(results.length === drives.length) {
console.log("GOTHERE");
cb(null, results);
}
});
}
당신이 사용하는 라이브러리 및 약간의 코드 샘플에 대한 정보를 제공 할 수 있습니까? – ChrisCM
내가 시도한 코드를 추가했습니다. 도움을 주셔서 감사합니다. –
제가 생각하는 것을 포함하여 답변을 입력했습니다. 다른, 그러나 유사한 시나리오, 그것이 도움이되는지 알려주세요! 그렇지 않으면 내가 파고들 것이다. – ChrisCM