EJS github 페이지에는 간단한 예제가 하나뿐입니다. https://github.com/visionmedia/ejsExpressJS를 사용하여 EJS 템플릿에 변수가 있는지 확인하는 적절한 방법은 무엇입니까?
예제
<% if (user) { %>
<h2><%= user.name %></h2>
<% } %>
이것은 user라는 변수의 존재 여부를 확인하는 것입니다. 몇 가지 일을하십시오. 그쵸?
내 질문은, 왜 세계에서 사용자 변수가 존재하지 않는 경우 Node가 ReferenceError를 던지겠습니까? 위의 예는 쓸모가 없습니다. 변수의 존재를 확인하는 적절한 방법은 무엇입니까? try/catch 메커니즘을 사용하여 ReferenceError를 가져올 것으로 예상됩니까?
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)
서버 코드에 "user"로컬 변수를 추가하는 것만으로이 오류를 해결할 수 있다는 것을 이해합니다.하지만 여기서는 런타임에서 이러한 변수의 존재를 확인하고 싶습니다. 당신의 매일을 사용한다면/다른 경우에는 널 검사 패턴을 사용하십시오. 존재하지 않는 변수에 대한 예외는 나에게 어리 석다.
내 손에 큰 문제가 있는지 궁금해지기 시작했습니다. 이것도 참조 오류를 throw합니다 : <% alert ('test'); %> –
@Aashay'alert'는 브라우저의'window' 객체의 일부이며, node.js에서는 사용할 수 없습니다. 대안은'console.log'이지만,'locals'를 통해 전달하지 않으면 ejs 템플릿에서 사용할 수 있을지 모르겠습니다. – Zikes
@Zikes이 경우 저는 EJS를 특별히 찾고 있습니다. 따라서 브라우저 페이지에 있습니다. 그러나 TJ가 말한 것처럼 typeof foo == 'undefined'가 작동합니다. 나는 foo가 정의되었지만 null이거나 비어있는 경우에도 간단한 !! foo를 추가 할 수 있다는 것을 배웠다. –