Jade - Template Engine: Cách kiểm tra xem một biến có tồn tại hay không


80

Tôi hiện đang sử dụng Jade cho một dự án mới. Tôi muốn hiển thị một trang và kiểm tra xem có một biến nào đó hay không.

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!

Tôi luôn gặp lỗi sau:

username is not defined

Bất kỳ ý tưởng về cách tôi có thể sửa lỗi này?


1
Có vẻ như bây giờ (2014), chúng tôi không còn gặp lỗi này nữa. Dễ sử dụng hơn nhiều.
gfaceless

Câu trả lời:


105

Điều này sẽ hoạt động:

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

- if (Isset (tên người dùng)) '
Isset

2
Xin lỗi, tôi nhầm lẫn với PHP và Javascript. Đã cập nhật câu trả lời của tôi.
Chetan

7
Xe tăng rất nhiều! Mã này hoạt động: - if (typeof username! == "undefined")
mbecker

93

Đơn giản hơn phương pháp của @ Chetan nếu bạn không ngại kiểm tra các giá trị giả thay vì các giá trị không xác định:

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

Điều này hoạt động vì cái tên hơi mỉa mai localslà đối tượng gốc của mẫu.


Điều này sẽ cho tôi một lỗi biên dịch: 'builtin_function_or_method' đối tượng không có thuộc tính 'username'
zakdances

@yourfriendzak - Bạn có chắc chắn lỗi của mình là do phần này của mẫu của bạn gây ra?
BMiner

1
Hoạt động hoàn hảo và nó tốt hơn so với sử dụng javascript nội tuyến, cảm ơn.
Sergi Ramón

Tôi thích câu trả lời này vì điều này cho thấy Jade là ngôn ngữ nhạy cảm với khoảng trắng.
Victor.Palyvoda

Cẩn thận điều này sẽ chỉ làm việc nếu biến được định nghĩa trong bộ điều khiển tại rendersân khấu:res.render('view', {username: user.name});
Augustin Riedinger

10
if 'username' in this
    p=username

Điều này hoạt động vì res.locals là đối tượng gốc trong khuôn mẫu.


6

Nếu bạn biết trước rằng bạn muốn một biến cụ thể có sẵn, nhưng không phải lúc nào cũng được sử dụng, tôi đã bắt đầu thêm giá trị "mặc định" vào đối tượng helpers.

app.helpers({ username: false });

Bằng cách này, bạn vẫn có thể làm if (username) {mà không gặp thất bại thảm hại. :)


2
Cảm ơn, mặc dù FYI cho express 3.x, bây giờ làapp.locals({ username: false });
7zark7

6
Cách tiếp cận tốt. Lưu ý rằng trong Express 4.x app.localskhông phải là một hàm nữa vì vậy nó phải làapp.locals.username = false;
Tom


0

Đã tạo một phần mềm trung gian để có phương pháp isDefinedkhả dụng ở mọi nơi trong quan điểm của tôi:

module.exports = (req, res, next) => {
  res.locals.isDefined = (variable) => {
    return typeof(variable) !== 'undefined'
  };  
  next();
};
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.