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

Это должно работать:

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

Ответ 2

Проще чем метод @Chetan, если вы не возражаете против проверки значений фальшивки вместо значений undefined:

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

Это работает, потому что несколько иронически названный locals является корневым объектом для шаблона.

Ответ 3

if 'username' in this
    p=username

Это работает, потому что res.locals является корневым объектом в шаблоне.

Ответ 4

Если вы заранее знаете, что хотите иметь доступную переменную, но не всегда ее использовать, я начал добавлять значение "по умолчанию" к объекту хелперов.

app.helpers({ username: false });

Таким образом, вы можете сделать if (username) { без катастрофического сбоя.:)

Ответ 6

Создал промежуточное программное обеспечение, чтобы метод isDefined доступен везде в моих представлениях:

module.exports = (req, res, next) => {
  res.locals.isDefined = (variable) => {
    return typeof(variable) !== 'undefined'
  };  
  next();
};