EJS github 페이지에는 하나의 간단한 예제가 있습니다 :
https://github.com/visionmedia/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)
내 서버 코드에 “사용자”로컬 변수를 추가하여이 오류를 제거 할 수 있다는 것을 이해합니다.하지만 여기서 요점은 매일 if / else를 사용하여 런타임에 이러한 변수가 있는지 확인하고 싶다는 것입니다. nullcheck 유형 패턴. 존재하지 않는 변수에 대한 예외는 저에게 우스꽝스러워 보입니다.
답변
js, typeof foo == 'undefined'
또는 “locals”가 그것들을 포함하는 객체의 이름이기 때문에 당신은 할 수 있습니다 if (locals.foo)
. 그것은 원시 js입니다 : p
답변
변수 앞에 locals
예: if(locals.user){}
답변
<% if (locals.user) { %>
// Your logic goes here
<% } %>
답변
“obj === void 0″을 확인하는 뷰 도우미를 만들 수 있습니다. 이것은 express.js 용입니다.
res.locals.get = function() {
var args = Array.prototype.slice.call(arguments, 0);
var path = args[0].split('.');
var root = this;
for (var i = 0; i < path.length; i++) {
if(root[path[i]] === void 0) {
return args[1]?args[1]:null;
} else {
root = root[path[i]];
}
};
return root;
}
그런 다음보기에서 사용하십시오.
<%- get('deep.nested.non.existent.value') %> //returns: null
<%- get('deep.nested.non.existent.value', "default value") %> //returns: default value
답변
사용자가 정의되었는지 확인하려면 다음을 수행해야합니다.
<% if (this.user) { %>
here, user is defined
<% } %>
답변
mongoose의 populate ()와 함께 2 개의 컬렉션 사이에 관계를 만들 때 mongoose / express / ejs와 함께 node.js를 사용하는 동일한 문제가 발생했습니다.이 경우 admins.user_id가 존재했지만 존재하지 않는 users._id와 관련이있었습니다.
따라서 이유를 찾을 수 없습니다.
if ( typeof users.user_id.name == 'undefined' ) ...
“null의 속성 ‘이름’을 읽을 수 없습니다”로 실패했습니다. 그런 다음 다음과 같은 검사를 수행해야한다는 것을 알았습니다.
if ( typeof users.user_id == 'undefined' ) ...
‘이름’의 ‘컨테이너’를 확인해야해서 작동했습니다!
그 후 이것은 동일하게 작동했습니다.
if ( !users.user_id ) ...
도움이 되었기를 바랍니다.
답변
대답을 위해이 페이지에 왔지만 다음과 같은 더 짧은 인라인 구문을 생각해 냈습니다.
<h2><%= user.name ? property.escrow.emailAddress : '' %></h2>