2012-05-22 2 views
1

나는 몽구스 개체에서 속성을 인쇄 할 옥 템플릿을 사용합니다. 이 객체는 mongoose의 dbref와 같은 채우기 기능을 통해 채워진 속성을 가지고 있습니다. 템플릿이 렌더링 될 때 나는 말도 안되게된다. 브라우저Jade는 "채워진"몽구스 속성에 대한 템플릿에서 예기치 않은 값을 렌더링합니다.

a.training-link(href='/training/#{training.details.id}') ... 

: 경로 템플릿

User.findById(req.params.user, function(err, user){ 
    res.render('training', {training:user.training}); 
}).populate('training.details'); 

:

간단한 예

<a href="/training/O &gt;°Cm5�" class="training-link">...</a> 

처음 페이지가로드되고 , 어디서 나는 규칙적인 몽고 16 진수 문자열 (4fac4e5f379cb0a68100015d)을 "O > ° Cm5 "와 같이 얻을 것으로 기대한다. 이는 서버를 다시 시작한 후 첫 페이지로드에서만 발생합니다. 모든 후속 페이지로드가 예상대로 렌더링됩니다.

여기에 무슨 일이 일어나고 어떻게 해결할 수 있습니까?

감사합니다.

+0

두 가지 질문 : 1.'populate' [재귀 적입니다] (https://github.com/LearnBoost/mongoose/issues/601). 귀하의 예제에서, 당신은'user.training'을 채우고 있습니다. 'user.training.details'도 채웠습니까? 2. 렌더링하기 전에 채우기가 완료 되었습니까? 'findById' 콜백 대신에'populate' 콜백에서 렌더링을하지 않으시겠습니까? – Nate

+0

당신은 절대적으로 옳습니다. 내 필사본에 난잡했다. '.populate ('training.details')'를 읽어야합니다. 나는 이것을 반영하기 위해 나의 질문을 편집했다. – smabbott

답변

0

이것은 약간 당황 스럽지만 나는 그것을 알아 냈다.

여러 가지 이유로 인해 위 질문에있는 코드가 두 번째 및 후속로드에서는 실행되지만 첫 번째에서는 실행되지 않는 논리 분기가 있습니다. 첫 번째로드에서만 실행되는 다른 분기는 비슷한 쿼리를 작성하지만 populate('training.details')을 추가하지 않았습니다. 난 말도 안되는 문자열 O¬N_7°¦�training.details이 아닌 오브젝트에서 .id을 호출 한 결과입니다.

일부 코드를 리팩터링해야하는 것처럼 보입니다.

관련 문제