Trên trang github của EJS, có một và chỉ một ví dụ đơn giản: https://github.com/visionmedia/ejs
Thí dụ
<% if (user) { %>
<h2><%= user.name %></h2>
<% } %>
Điều này dường như đang kiểm tra sự tồn tại của một biến có tên người dùng và nếu nó tồn tại, hãy thực hiện một số thao tác. Duh, phải không?
Câu hỏi của tôi là, tại sao Node lại ném ra một ReferenceError nếu biến người dùng không tồn tại? Điều này làm cho ví dụ trên trở nên vô dụng. Cách thích hợp để kiểm tra sự tồn tại của một biến là gì? Tôi có dự kiến sử dụng cơ chế thử / bắt và lấy ReferenceError đó không?
ReferenceError: user is not defined
at IncomingMessage.anonymous (eval at <anonymous> (/usr/local/lib/node/.npm/ejs/0.3.1/package/lib/ejs.js:140:12))
at IncomingMessage.<anonymous> (/usr/local/lib/node/.npm/ejs/0.3.1/package/lib/ejs.js:142:15)
at Object.render (/usr/local/lib/node/.npm/ejs/0.3.1/package/lib/ejs.js:177:13)
at ServerResponse.render (/usr/local/lib/node/.npm/express/1.0.7/package/lib/express/view.js:334:22)
at Object.<anonymous> (/Users/me/Dropbox/Projects/myproject/server.js:188:9)
at param (/usr/local/lib/node/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:146:21)
at pass (/usr/local/lib/node/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:162:10)
at /usr/local/lib/node/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:152:27
at Object.restrict (/Users/me/Dropbox/Projects/myproject/server.js:94:5)
at param (/usr/local/lib/node/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:146:21)
Tôi hiểu rằng tôi có thể làm cho lỗi này biến mất bằng cách chỉ cần thêm một biến cục bộ "người dùng" trong mã máy chủ của mình, nhưng toàn bộ điểm ở đây là tôi muốn kiểm tra sự tồn tại của các biến như vậy trong thời gian chạy bằng cách sử dụng if / else hàng ngày của bạn kiểu mẫu nullcheck. Một ngoại lệ cho một biến không tồn tại có vẻ vô lý đối với tôi.