node.js 관련 질문입니다. 익스프레스 라우터에서 전달한 값을 제이드의 인라인 자바스크립트에서 받고싶습니다.
조회수 765회
익스프레스 라우터에서넘겨 준 rows 값을 제이드의 인라인 자바스크립트로 받으려고 합니다. '#{rows[1].id}' 이라는 코드로 접근할 수 있는데, 이게 어디서 나오는 건지 아무리 찾아봐도 모르겠습니다. 또한 왜 반복문에서는 접근할 수 없을까요? 혹시 다른방법으로 접근할 수는 없을 까요?
node.js code
app.get('/output', function(req, res){
var sql = 'select * from table';
conn.query(sql, function(err, rows_){
if(err){
console.log(err);
} else {
res.render('output', {rows:rows_})}
})
});
output.jade code
html
head
body
script.
alert('#{rows[1].id}') //가능
for(var i=0; i<5; i++){
alert('#{rows[i].id}') //불가능
};
2 답변
-
영민님의 rows 데이터가 어떤 형태로 넘어 오는지 몰라 rows[i].id를 사용하신 것으로 추측하여 제가 임의로 배열에 json형태로 담아서 사용해 보았습니다. 제가 사용하였던 이미지를 첨부하오니 도움이 되신다면 좋겠습니다.
- 답변 달아주셔서 감사합니다. 조영민 2019.1.4 16:21
- 안 되네요. 더 연구해야 하겠습니다. 조영민 2019.1.4 16:22
- 제가 테스트에 사용해 보았던 이미지를 첨부하여 수정해 보았습니다. 해결에 도움이 된다면 좋겠습니다. Gost 2019.1.4 18:07
- 제가 집에 들어가는대로 해보겠습니다. 이렇게나 친철하게 알려주셔서 정말 감사합니다. 조영민 2019.1.4 20:09
- 제가 초보자라서 그러는데 제이슨 라이브러리는 따로 자바스크립트에 내장된 라이브러리인가요? 조영민 2019.1.4 23:09
- 네, 저도 잘은 모르지만 별도의 선언 없이 사용 할 수 있는것으로 알고 있습니다. Gost 2019.1.5 00:46
- 성태님이 제공해주신 코드에서 #을 !로 바꾸니까 됩니다. 성태님 감사합니다. var rows = JSON.parse( '!{JSON.stringify(rows)}'.replace(/"/, '"') ); 조영민 2019.1.5 11:51
-
제가 뒤져보니
#{자바스크립트 표현식}
문법은 Jade 문서의 보간(interpolation) 부분에 있었습니다. (명시적으로 말은 안해주고 예시로만 보여주네요.)- var msg = "not my inside voice"; p This is #{msg.toUpperCase()} // <p>This is NOT MY INSIDE VOICE</p>
그리고 반복문에서 자바스크립트 변수에 접근하는 것도 됩니다. (안 될 리가 없죠.) Jade 문서의 반복(iteration) 부분을 참고하자면 대략 이렇게 시도해 보실 수 있겠네요. (테스트는 안해봤습니다.)
// 이미 이 view는 rows라는 JS 변수를 받아쓰고 있으므로 body // JS 구간에 들어오면 script. for (var i=0; i<5; i++) { // 그냥 이렇게 쓰면 될것 같은데요... alert(rows[i].id + "번 글입니다.") };
댓글 입력