2011-04-06 5 views
3

그래서 express + jade == cool. 거기에 질문 없습니다. 그러나 장고에서 오는, 장고 서식 파일을 사용하는 실패 모드를 놓치고 있어요. django에서 존재하지 않는 변수를 렌더링하려고하면 그냥 무시하고 계속 이동합니다. 이것이 정말로 짜증나는시기가 있지만 대부분의 경우 그것은 그렇지 않습니다. 따라서 Express와 함께 jade에서 변수를 렌더링하려고하면 express는 해당 변수가 존재하지 않거나 정의되지 않은 경우 500 오류로 불평합니다.표현과 비취, 렌더링 오류 무시


500 TypeError: Jade:14 
12. ' // main content, post, login, etc ' 
13. ' - if (data.session.user) ' 
14. ' != partial(\'dash') ' 

Jade:3 
1. '- if (data.session.user)' 
2. ' p #{data.session.user.id}' 
3. ' p #{data.cookie.connect.sid}' Cannot read property 'connect' of undefined 

저는 여기서 실험하고 있습니다. 따라서 인쇄하려고하는 것을 무시하십시오. :) 요약하면 jade/express에 템플릿의 오류를 무시하고 렌더링을 계속할 수있는 쉬운 방법이 있습니다 (예 : 장고 템플릿 시스템의 동작).

답변

2

자바 스크립트의 평가가 실패 할 때 렌더러가 오류를 발생시키기 때문에 불가능합니다.

https://github.com/visionmedia/jade/blob/master/lib/jade.js#L197

당신은 프로젝트를 포크와 rethrow에 전화를 피하기 위해 옵션을 추가하거나 적어도 res.render를 포장하여 더 나은 실패 렌더링 할 수 있습니다

app.render = function (res, options) { 
    try { 
    res.render(options); 
    } catch(e) { 
    //log(e); 
    } 
} 
+2

잘 촬영하십시오. 나는 그것을 포크하고 싶지 않다. 렌더링 오류를 포착하고 null/false 인 더미 변수를 만들고 catch 문을 통해 다시 렌더링 할 수 있는지 궁금합니다. –

2

당신은 변수 존재 여부를 테스트 할 수 있습니다 옥 :

if typeof(msg) !== 'undefined' 
    p #{msg} 

자동이 아니지만 이것이 생명의 은인임을 알았습니다.

+2

이것은 과도한 것처럼 보이지만, 템플릿은 정의되지 않은 오류를 던져서는 안됩니다. – qodeninja