Jade-템플릿 엔진 : 변수가 있는지 확인하는 방법


80

저는 현재 새 프로젝트에서 Jade를 사용하고 있습니다. 페이지를 렌더링하고 특정 변수를 사용할 수 있는지 확인하고 싶습니다.

app.js:

app.get('/register', function(req, res){
    res.render('register', {
        locals: {
          title: 'Register',
          text: 'Register as a user.',
        }
      });
});

register.jade:

- if (username)
p= username
- else
p No Username!

항상 다음과 같은 오류가 발생합니다.

username is not defined

이 문제를 어떻게 해결할 수 있는지에 대한 아이디어가 있습니까?


1
지금 (2014 년) 쯤이면 더 이상이 오류가 발생하지 않습니다. 사용하기 훨씬 쉽습니다.
gfaceless 2014

답변:


105

이것은 작동합니다.

- if (typeof(username) !== 'undefined'){
  //-do something
-}

-if

2
죄송합니다. PHP와 Javascript가 혼동되었습니다. 내 대답을 업데이트했습니다.
Chetan

7
많은 탱크! 이 코드는 작동합니다 :
-if

93

정의되지 않은 값 대신 잘못된 값을 테스트하는 데 신경 쓰지 않는다면 @Chetan의 방법보다 간단합니다.

if locals.username
  p= username
else
  p No Username!

이것은 다소 아이러니하게 명명 된 locals것이 템플릿의 루트 개체 이기 때문에 작동합니다 .


이렇게하면 컴파일러 오류가 발생합니다. 'builtin_function_or_method'개체에는 'username'속성이 없습니다.
zakdances

@yourfriendzak-템플릿의이 부분 때문에 오류가 발생 했습니까?
BMiner 2013

1
완벽하게 작동하며 인라인 자바 스크립트를 사용하는 것보다 낫습니다.
Sergi Ramón 2013

이것은 Jade가 공백에 민감한 언어임을 보여주기 때문에이 답변을 좋아합니다.
Victor.Palyvoda 2014 년

render단계 는 컨트롤러에서 변수가 정의 된 경우에만 작동합니다 .res.render('view', {username: user.name});
Augustin Riedinger

10
if 'username' in this
    p=username

res.locals가 템플릿의 루트 개체이기 때문에 작동합니다.


6

사용 가능한 특정 변수를 원하지만 항상 사용되는 것은 아니라는 것을 미리 알고 있다면 헬퍼 객체에 "기본값"값을 추가하기 시작했습니다.

app.helpers({ username: false });

이렇게 if (username) {하면 치명적인 오류 없이도 작업을 수행 할 수 있습니다 . :)


2
감사합니다. Express 3.x에 대한 FYI는 지금입니다app.locals({ username: false });
7zark7 2013

6
좋은 접근입니다. Express 4.x app.locals에서는 더 이상 함수가 아니므로 다음과 같아야합니다app.locals.username = false;
Tom


0

isDefined내 뷰의 모든 곳에서 메서드를 사용할 수 있도록 미들웨어를 만들었습니다 .

module.exports = (req, res, next) => {
  res.locals.isDefined = (variable) => {
    return typeof(variable) !== 'undefined'
  };  
  next();
};
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.