노드 (v0.10) 스택을 처음 사용합니다.node.js 다국어 프리젠 테이션에 대한 지침이 필요합니다.
이나는 (희망)과 같은 최신 MongoDB의 다국어 기사 한 : 나는대로 쿼리 내가 특정 언어의 기사를 표시
_id
...more fields...
text: [
{lang: 'en', title: 'some title', body: 'body', slug: 'slug'},
....
]
매번는 다음과 같습니다
을 나는 다음과 같은 달성하기 위해 노력하고var query = Model.findOne({'text.slug': slug});
query.exec(function(err, doc){
async.each(doc.text, function(item, callback){
if (item.lang == articleLang) {
//populate the article to display
}
});
res.render('view', {post:articleToDisplay});
});
슬러그는 각 언어마다 고유합니다. 문제는 몽고가 검색 한 서브 디렉터리가 아닌 모든 서브 코드가있는 전체 문서를 반환한다는 것입니다. 이제는 모든 하위 문서를 반복하고 클라이언트 측에 적절한 것을 표시하거나 서버에서 async.each를 사용하여 필요한 서브 디렉토리를 얻고 그 중 하나만보기로 보내야합니다. 나는 서버에서 비동기로 그것을하고있다. 그 확인은? 또한 async는 비동기 적으로 반복되지만 노드는 여전히 전체 루프가 끝날 때까지 대기 한 다음 뷰를 렌더링합니다. async.each가 완료 될 때까지 사용자가 실제로 차단되었다고 생각하는 것이 빠졌습니까? 나는 여전히 비동기 실행에 대한 내 머리를 감싸하려고 노력하고있다. 이 코드를 관리하는 방법을 개선 할 수있는 방법이 있습니까? 그것은 subdocs 꽤 표준 절차로 보인다!
미리 도움 주셔서 감사합니다.
감사! 내 질문에 대답 할 수 있다면 비동기.각각은 모든 옵션이 반복 될 때까지 앱을 차단하고 있으며이를 답변으로 받아 들일 것입니다. – sunlover
그래, 여전히 모든 배열 항목을 순차적으로 처리하는 것이 아니라 비동기식으로 반복 처리한다는 의미입니다. http://www.sebastianseilund.com/nodejs-async-in-practice - 비동기가 어떻게 작동하는지 더 잘 이해할 수 있습니다. async.each() ..는 여전히 비동기 적으로 실행됩니다. 그러나 모든 작업이 완료된 경우, 즉 모든 개별 텍스트 필드가 반복되고 뷰를 렌더링 할 때만 컨트롤을 다시 가져옵니다. 오히려 일치하는 항목이 있는지 확인하고 마지막 콜백을 호출하거나 다른 모든 작업을 중지하여 종료하는 변수를 설정할 수 있습니다. – BatScream
@sunlover : 위 응답에 대한 태그. – BatScream