Node.js ejs 관련 질문입니다. 채택완료

ejs를 사용하려고 res.locals를 통해 ejs 안에서 사용될 변수를 넣었는데,

(res.locals.is_mobile 변수. 원래 이렇게하면 템플릿에서 is_mobile 변수를 사용할수 있어야함)

(+ req.query 는 원래 req.param() 함수로 하는건데 deprecated 떠서...)

(+ cfg.etc.m_agent 는 윗줄에서 선언했던 변수입니다)

 

Copy
// 모바일(스마트폰) 기기로 접속했는지 여부 확인

app.use((req,res,next) => {

    let mobile = new RegExp(cfg.etc.m_agent,'ig');

    let is_mobile = (req.session.device) ? req.session.device == 'mobile' : mobile.test(req.header('User-agent'));

    

    // get변수를 통해 디바이스설정을 바꿀 수 있도록 설정

    if(req.query.device){

        is_mobile = (req.query.device == 'mobile');

    }

    

    if(is_mobile) req.session.device = 'mobile';

    else req.session.device = 'pc';

    res.locals.is_mobile = req.is_mobile = is_mobile;

    next();

});

 

해당 변수가 선언되지 않았다는 (ReferenceError) 에러가 납니다.

(아래는 <style> 태그 안에있는 css 구문에서 is_mobile 을 사용하다가 난 에러 메시지)

 

Copy
/*

ReferenceError: /mnt/HDD2/node_sockets/dev_servers/gozaboard/assets/views/error.ejs:11
     9 |     white-space:pre-wrap;
    10 |     word-break:break-all;
 >> 11 |     <% if(is_mobile){ %>
    12 |     font-size:0.6em;
    13 |     <% } %>
    14 | }

is_mobile is not defined

*/

 

어떻게 해야 되나요?

답변 4개

채택된 답변
+20 포인트
is_mobile is not defined   라고 하잖아요.. 

정의 안되었다하니. 왜그런지 확인해야겠죠.. 에러내용에 항상 답이 있다

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

javascript가 ; 가 있으면 순차적으로 실행되는게 아니라는것을 참고하셔요..

댓글을 작성하려면 로그인이 필요합니다.

그런데... 다른거 다 냅두고 모듈만 다시까니깐 또 되네요...?

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

어려운 질문인 것 같습니다. 답변을 위해서 EJS를 사용해 볼까 생각해 보다가,  

 

이것은 큰 그림이 아닌 것 같아서 답변드립니다. 참조 글(https://sir.kr/cm_free/1562537)

 

주제넘지만, 우선 큰 방향성에 별 도움이 안되는 프레임 워크같습니다.

 

확장성, 편의성등 여러가지를 고려한다면 다른 솔루션으로 배우는 것을 추천드립니다. 

 

(이 방향이 맞는지는 아루래도 2-3년후에 결정이 날 것 같습니다.)

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

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

로그인
🐛 버그신고