2013-06-07 48 views
5

Có cách nào để tôi có thể biết mẫu có sẵn không? Về cơ bản tôi muốn tạo các mẫu cụ thể và dự phòng nhưng không muốn chứa logic đó trong chính mẫu đó.Express, kiểm tra xem mẫu có tồn tại

if(res.templateExists('specific_page')) { 
    res.render('specific_page'); 
} else { 
    res.render('generic_page'); 
} 

Tên specific_page được generatead trong thời gian chạy dựa trên thiết bị người dùng, ngôn ngữ, vv

Chú ý: Tôi không cần phải biết làm thế nào để làm địa hóa chuỗi trong một mẫu, mà tôi đã có. Tôi đang tìm các trường hợp toàn bộ bố cục/mẫu thay đổi.

+0

Bản sao có thể có của [Làm cách nào tôi có thể bắt lỗi mẫu/thiếu hiển thị trong node.js bằng cách sử dụng express.js?] (Http://stackoverflow.com/questions/7283896/how-can-i-catch-a- rendering-error-missing-template-in-node-js-using-express-js) – Wtower

Trả lời

8

Bạn có thể sử dụng này:

res.render('specific_page', function(err, html) { 
    if (err) { 
    if (err.message.indexOf('Failed to lookup view') !== -1) { 
     return res.render('generic_page'); 
    } 
    throw err; 
    } 
    res.send(html); 
}); 

này sẽ phân biệt giữa một lỗi ném vì mẫu không thể được tìm thấy (trong trường hợp này nó sẽ làm cho generic_page thay), và bất kỳ lỗi nào khác mà có thể xảy ra (được ném lại). Nó không hoàn toàn ổn định vì nó dựa vào thông báo lỗi đang được ném, nhưng tôi không nghĩ có cách nào khác để xác định loại lỗi.

+0

Rất tiếc, không cho phép tôi phân biệt giữa lỗi trong mẫu và mẫu không tồn tại. Vì vậy, tôi sẽ không chắc chắn nếu tôi nên nâng cao một báo động, thất bại một thử nghiệm, hoặc cách khác. –

+0

@ edA-qamort-ora-y xem chỉnh sửa của tôi :) – robertklep

+0

Tôi thấy rằng 'err.message' là' mẫu không tìm thấy: 'với nunjucks 3.0.0. Có lẽ nó đã được thay đổi sau đó từ 'Không nhìn tra cứu' này. – trss

Các vấn đề liên quan