node.js로 mysql에서 select하고 난 다음 가져온 데이터를 쓰고싶어요ㅜㅜ
조회수 5565회
var results=[]; //결과 담아올 빈 배열
connection.query('SELECT * from img_result_tb', function(err, rows, fields) {
if (!err){
for(var i=0; i<6;i++){
results.push(rows[i].resultId); //resultId에 해당하는 부분만 가져옴
}
console.log('The solution is: ', results); //정상출력됨
}
else
console.log('Error while performing Query.', err);
});
쿼리문 callback함수에서 results라는 배열에 원하는 정보를 담았는데 저 배열을 함수 밖에서 써지지가 않아요. 숫자를 담아 와서 javascript로 각 숫자에 해당하는 색깔을 표현하려고 합니다. 가져온 results배열을 어떻게 하면 밖에서 쓸 수 있을까요??
ps. 지금 저 코드가 index.js라는 파일 안에 썼는데, index.js안에서 document.write같은 거를 쓰면 document가 정의 되있지 않다고 합니다. 왜그런걸까요 ㅜ ㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
생각을 해보세요...
node 는 브라우져가 아닌 서버측에서 동작해요.
document 는 클라이언트측. 즉 브라우져내에서 존재할 수 있어요.
node 에서 사용하는 javascript 와 html 내에서 사용하는 javascript 는 문법은 같을 순 있어도 목적하는 바가 달라요.
node 는 서버측. 질문자가 말하는 javascript 로 DOM 을 다루는 것은 클라이언트측.
혼동하지 마세요.
-
위 답변은 PS에 대한 것이고 원래 질문에 대해서 답을 좀 찾아보자면... 이건 자바스크립트의 비동기성(asyncronicity) 문제로 보입니다.
위의 모든 예제에서 정의된 함수들은 비동기 콜백이라고 부르는 함수입니다. 그게 뭐냐면 생성은 되는데 즉시 실행은 되지 않는다는 거에요. 함수는
setTimeout
으로 잡으면 이벤트 대기열에 들어가고,AJAX
콜백에서는 그 콜이 일어나야 실행되고,onload
에서는 DOM이 준비돼야 실행이 됩니다. 출처따라서 대략 이렇게 하셔야 할 것 같습니다. 테스트는 안해보았으니 한번 시도해 보세요.
// 미리 싹다 정의를 해놓음 var results=[]; // results 변수의 범위(scope) 문제도 해결됨. var pushResults = function (rows) { // 5개만 가져오려면 i<6 하시면 되긴 하는데 전체를 다 가져오려면 이렇게 할 수 있습니다. for (var i=0; i<results.length; i++) { results.push(rows[i].resultId); } } // 필요할 때만 콜함 connection.query('SELECT * from img_result_tb', function (err, rows, fields) { if (!err) { pushResults(results); console.log('The solution is: ', results); } else { console.log('Error while performing Query. ', err); }});
댓글 입력