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 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    이미지

    이미지

    이미지

    영민님의 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 + "번 글입니다.")
            };
    
    • 혹시 jade의 script태그 안 반복문에서 랜더링된 변수에 접근할 수 있는 방법은 없을까요? '#{}' 요렇게 따음표 안에 있으니까 반복이 안 되는 것 같습니다. \' 요렇게 이스케이프해도 안 되더라구요. 다른게 문제일까요? 조영민 2019.1.3 22:19
    • script 안에서라면 그냥 보간문법 안쓰고 바로 쓰면 될거 같은데.. 답변 수정해볼게요. 엽토군 2019.1.4 10:49

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)